PDA

Просмотр полной версии : [Вопрос] Как прочитать все файлы в одной директории



Иван Бубнов
31.01.2016, 00:19
Всем привет. Недавно возник такой вопрос, как открыть все файлы находящиеся в одной папке и записать данные в переменную. Использую mxINI, файлов не так уж и много. Название файлов таковы: 500, 1000, 1500, 2000 и так продолжается до 10.000

Думал открыть все файлы как-то так:
if(!(string % 500)))//string - format(string,sizeof(string), "users/%s.ini");
{
ini_getInteger(....);
// и т.д
}

Заранее благодарен, надеюсь суть проблемы понятен, сформулировал сложно)

L0ndl3m
31.01.2016, 15:31
new
str[32],
file,
value;

for(new i = 500; i <= 10000; i += 500)
{
format(str, sizeof(str), "users/%i.ini", i);
file = ini_openFile(str);
ini_getInteger(file, "ключ", value);
// при первой итерации:
// открываем файл "users/500.ini и берём данные из строки: "ключ = число"
// теперь в переменной value будет храниться число после символа '='
ini_closeFile(file);
}

Иван Бубнов
31.01.2016, 17:35
Без цикла не обойтись?

ziggi
31.01.2016, 17:46
Без цикла не обойтись?
Легко:


new
file,
value;

file = ini_openFile("users/500.ini");
ini_getInteger(file, "ключ", value);
ini_closeFile(file);

file = ini_openFile("users/1000.ini");
ini_getInteger(file, "ключ", value);
ini_closeFile(file);

file = ini_openFile("users/1500.ini");
ini_getInteger(file, "ключ", value);
ini_closeFile(file);

file = ini_openFile("users/2000.ini");
ini_getInteger(file, "ключ", value);
ini_closeFile(file);

file = ini_openFile("users/2500.ini");
ini_getInteger(file, "ключ", value);
ini_closeFile(file);

file = ini_openFile("users/3000.ini");
ini_getInteger(file, "ключ", value);
ini_closeFile(file);

file = ini_openFile("users/3500.ini");
ini_getInteger(file, "ключ", value);
ini_closeFile(file);

file = ini_openFile("users/4000.ini");
ini_getInteger(file, "ключ", value);
ini_closeFile(file);

file = ini_openFile("users/4500.ini");
ini_getInteger(file, "ключ", value);
ini_closeFile(file);

file = ini_openFile("users/5000.ini");
ini_getInteger(file, "ключ", value);
ini_closeFile(file);

file = ini_openFile("users/5500.ini");
ini_getInteger(file, "ключ", value);
ini_closeFile(file);

file = ini_openFile("users/6000.ini");
ini_getInteger(file, "ключ", value);
ini_closeFile(file);

file = ini_openFile("users/6500.ini");
ini_getInteger(file, "ключ", value);
ini_closeFile(file);

file = ini_openFile("users/7000.ini");
ini_getInteger(file, "ключ", value);
ini_closeFile(file);

file = ini_openFile("users/7500.ini");
ini_getInteger(file, "ключ", value);
ini_closeFile(file);

file = ini_openFile("users/8000.ini");
ini_getInteger(file, "ключ", value);
ini_closeFile(file);

file = ini_openFile("users/8500.ini");
ini_getInteger(file, "ключ", value);
ini_closeFile(file);

file = ini_openFile("users/9000.ini");
ini_getInteger(file, "ключ", value);
ini_closeFile(file);

file = ini_openFile("users/9500.ini");
ini_getInteger(file, "ключ", value);
ini_closeFile(file);

file = ini_openFile("users/10000.ini");
ini_getInteger(file, "ключ", value);
ini_closeFile(file);

Иван Бубнов
31.01.2016, 17:49
Лучше уж циклом тогда. :trollface:

wAx
01.02.2016, 08:14
Чем лучше? По сути одно и то же. Просто в цикле компилятор сам за тебя определит название файла и загрузит его. А без цикла код такой же просто места больше занимает ))

Profyan
01.02.2016, 10:12
Чем лучше? По сути одно и то же. Просто в цикле компилятор сам за тебя определит название файла и загрузит его. А без цикла код такой же просто места больше занимает ))

ну ведь задача программиста - это максимально облегчить свой труд и перекинуть всю работу на машину?!)

ziggi
02.02.2016, 12:32
ну ведь задача программиста - это максимально облегчить свой труд и перекинуть всю работу на машину?!)

Да, но кому-то важнее скорость, а мой вариант значительно быстрее.

Иван Бубнов
02.02.2016, 13:52
А цикл не может только проверять 500сотые файлы? пропустив 1..499 и тд. А кстати я использую foreach, может с ним это получится сделать нет?

$continue$
02.02.2016, 15:06
А цикл не может только проверять 500сотые файлы? пропустив 1..499 и тд. А кстати я использую foreach, может с ним это получится сделать нет?

Эм?

http://i.imgur.com/NzQySBf.png

В Pawn аналогично работает цикл.

Daniel_Cortez
02.02.2016, 15:56
Да, но кому-то важнее скорость, а мой вариант значительно быстрее.
Гонялись за скоростью, получили антипаттерн.
Китайский код (http://lurkmore.to/%D0%98%D0%BD%D0%B4%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9_%D0%BA%D0%BE%D0%B4#K.D0.B8.D1.82.D0.B0.D0.B9.D1.81.D0.BA.D0.B8.D0.B9_.D0.BA.D0.BE.D0.B4)

ziggi
02.02.2016, 16:33
Гонялись за скоростью, получили антипаттерн.
Китайский код (http://lurkmore.to/%D0%98%D0%BD%D0%B4%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9_%D0%BA%D0%BE%D0%B4#K.D0.B8.D1.82.D0.B0.D0.B9.D1.81.D0.BA.D0.B8.D0.B9_.D0.BA.D0.BE.D0.B4)

Я же просто шучу :)