[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
[Файлы] Урок 1: Чтение
Дата: 13.01.2011, Четверг, 05:49:06 | Сообщение # $NUMBER
Группа: Удаленные
Сообщений:
Репутация: +
Решил создать серию уроков, посвященных работе с файлами.
Многие спросят, зачем я решил опять писать уроки? В инете моих уроков как тараканов? Я отвечу. Это либо потому что мне нравится учить, либо потому что я хочу попасть на 1 место топа флудеров. И уж поверьте, это из за места в топе smile

Это будет на много быстрее 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);

И так, мы открыли файл, теперь нужно прочитать данные.
Чтение, как и запись происходят достаточно интерестным способом. в место того чтобы читать только нужную нам строку, он читает все по очереди. Сейчас объясню подробней. Каждый раз когда мы вводим функцию чтения, мы получаем строку, что ниже той что мы читали в предыдущий раз. Есть функция перемещения по файлу, но я ее не понял, и обхожусь без нее. smile
Да, чтение возвращается к началу только после закрытия и открытия этого файла.

И так, функция 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.
Учтите, что по идее дажно писатся без ;, хотя может и потребывать этот знак smile
Если плохо компилируется, скинте ошибки, я не компилировал, так что мог где-то накосячить smile

Такс, теперь нужно закрыть файл.
fclose(file);
Где file - хендлайн файла.

Ну вот и все, теперь вы можите читать данные из файла. Потом раскажу о записи и о работе с файломи, а потом сделаем по ним регу))

Дата: 13.01.2011, Четверг, 12:55:39 | Сообщение # $NUMBER
Группа: VIP
Сообщений: 1021
Репутация: 815+
хороший урок! старался
Дата: 13.01.2011, Четверг, 19:23:06 | Сообщение # $NUMBER
Группа: Проверенные
Сообщений: 114
Репутация: 262+
молодец, спасибо!
Дата: 13.01.2011, Четверг, 19:44:39 | Сообщение # $NUMBER
Группа: Удаленные
Сообщений:
Репутация: +
Так-же вот вам для того чтобы в файле писать русскими буквами, допустим :
Пароль=
Левл=
и т.д
Code
stock fwriteRUS(File:file,string[])  //Записать строку с кирилицей  
{
  for(new i; i < strlen(string); i++)
     fputchar(file,string[i],false);
  return 1;
}
Дата: 13.01.2011, Четверг, 19:54:43 | Сообщение # $NUMBER
Группа: Удаленные
Сообщений:
Репутация: +
Я об этом хотел позже расказать biggrin
Дата: 13.01.2011, Четверг, 20:16:27 | Сообщение # $NUMBER
Группа: Удаленные
Сообщений:
Репутация: +
Xe[N]o, в слудующем уроке да? biggrin
Дата: 13.01.2011, Четверг, 20:22:01 | Сообщение # $NUMBER
Группа: Удаленные
Сообщений:
Репутация: +
угу, он как раз про запись в файл.
Дата: 14.01.2011, Пятница, 06:16:05 | Сообщение # $NUMBER
Группа: Удаленные
Сообщений:
Репутация: +
Xe[N]o, ну простите...
Дата: 14.01.2011, Пятница, 07:48:11 | Сообщение # $NUMBER
Группа: Удаленные
Сообщений:
Репутация: +
Ничо, я потом тогда просто подробно объясню, почему так smile
Дата: 14.01.2011, Пятница, 07:56:02 | Сообщение # $NUMBER
Группа: Удаленные
Сообщений:
Репутация: +
Xe[N]o , могу так же поделится stock'ами , которые "Возвращает правую часть строки" "Возвращает левую часть строки" и "Доставать подстроку-параметр из строки"
Дата: 14.01.2011, Пятница, 07:58:30 | Сообщение # $NUMBER
Группа: Удаленные
Сообщений:
Репутация: +
Я сам себе уже давно написал сток для получения данных их стринга по ключивому символу, мне этого хватает))
Дата: 14.01.2011, Пятница, 12:10:47 | Сообщение # $NUMBER
Группа: Удаленные
Сообщений:
Репутация: +
Quote (Xe|N|o)
Я сам себе уже давно написал сток для получения данных их стринга по ключивому символу, мне этого хватает))

дай дай дай дай
Дата: 14.01.2011, Пятница, 22:08:07 | Сообщение # $NUMBER
Группа: Удаленные
Сообщений:
Репутация: +
Во втором уроке напишу smile
Дата: 14.01.2011, Пятница, 22:44:36 | Сообщение # $NUMBER
Группа: Модераторы
Сообщений: 1045
Репутация: 1112+
Хм...
Молодчик... Давай в том же духе biggrin
  • Страница 1 из 1
  • 1
Поиск: