Решил создать серию уроков, посвященных работе с файлами.
Многие спросят, зачем я решил опять писать уроки? В инете моих уроков как тараканов? Я отвечу. Это либо потому что мне нравится учить, либо потому что я хочу попасть на 1 место топа флудеров. И уж поверьте, это из за места в топе Это будет на много быстрее Dini, mxINI и любых других файловых систем.
И так начнем.
Для того чтобы прочитать из файла, его нужно сначало открыть, ну и создать. Для начала создадим файл в папке scriptfiles, напишите там пару строк.
Теперь, мы можем открыть его и прочитать, но для начала разберемся с функцией для открытия файла fopen.
fopen(name[], mode);
name[] - имя файла с расширением.
mode - режим.
Есть всего 4 режима:
io_read - для чтения файла, только для чтения.
io_write - для записи, при открытии создает\пересоздает файл.
io_readwrite - для чтения и записи, пересоздает ли файл не знаю, не пользовался.
io_append - для записи без пересоздания\создания файла.
Для нашего урока нам нужен режим io_write.
Так же, при открытии файла, функция возвращает его handle, это что-то типо порядкового id. Заносить его надо в переменную с типом File.
Претположим что файл у нас называется text.txt, открываем его так:
new File:file = fopen("text.txt",io_write);
И так, мы открыли файл, теперь нужно прочитать данные.
Чтение, как и запись происходят достаточно интерестным способом. в место того чтобы читать только нужную нам строку, он читает все по очереди. Сейчас объясню подробней. Каждый раз когда мы вводим функцию чтения, мы получаем строку, что ниже той что мы читали в предыдущий раз. Есть функция перемещения по файлу, но я ее не понял, и обхожусь без нее.
Да, чтение возвращается к началу только после закрытия и открытия этого файла.
И так, функция fread(File:handle, string[], size = sizeof string, bool: pack = false);
handle - наша переменная.
string - стринг в который будет происходить сохранение данных с строки.
size - размер стринга.
pack - понятия не имею что это, как я понял это что-то типо архивации, но так как это по стандартну отключено, менять не чего не будем.
И так, дабы записать данные с строки, используем функцию вот так:
fread(file,string);
Почему всего 2 параметра? Потому что size автоматичиски установлен на sizeof(string), то есть он автоматичиски, даже если мы не указываем размер стринга, он его находит по введенной переменной. Примерно тоже самое с pack, только тут он изначально установлен на false.
И так, вот мы и прочитали данные из 1 строки, чтобы прочитать данные из 2, нужно еще раз использовать эту функцию.
Так же вы можете использовать мой макрос для чтения строки, ниже действуйщей на указаное вами значение строк.
Code
#define GetLine(%0,%1,%2) for(new i; i<%0;i++) \
{ \
fread(%1,%2); \
}
Использование GetLine(20,file,string) - прочтет данные из файла с хендлайном file, на строке 20, и запишит их в переменную string.
Учтите, что по идее дажно писатся без ;, хотя может и потребывать этот знак
Если плохо компилируется, скинте ошибки, я не компилировал, так что мог где-то накосячить
Такс, теперь нужно закрыть файл.
fclose(file);
Где file - хендлайн файла.
Ну вот и все, теперь вы можите читать данные из файла. Потом раскажу о записи и о работе с файломи, а потом сделаем по ним регу))