 |
|
 |
|
|
|
Последние Файлы GTA 4 |
Последние Файлы GTA-MP |
Реклама |
|
|
|
|
|
Урок по работе с файлами
| |
| XAOC | Дата: Воскресенье, 08.02.2009, 21:02 | Сообщение # 1 |
|
Советчик
Группа:
Разработчики
Сообщений: 1190
Награды: 11
Город: Гдета там>>
Репутация: 311
Замечания: 0%
Статус: 
| Урок 1. (основы) Итак, пока у меня есть время решил написать урок по работе с файлами с помощью встроенных в SA-MP функций, я не буду углубятся в них, а просто опишу как можно записать/прочитать в/из файла данные Начнём мы пожалуй с перечисления тех самых функций с которыми мы будим работать Такт 1. Описание функций fopen(const name[], filemode: mode = io_readwrite); функция служит для открытия файла и передачи ссылки на него для дальнейшей работы входными параметрами являются: name[] - имя отрываемого файла, включает и путь до него filemode - способ открытия, по умолчанию io_readwrite, давайте поподробнее рассмотрим все способы Quote io_read - открывает файл с возможностью чтения, если файл не существует то произойдёт краш сервера io_write - открывает файл и перезаписывает всё его содержимое io_readwrite - открывает файл с возможностью чтения/записи, если файл не существует, то создаёт его io_append - открывает файл с возможностью дозаписи файла, если файл не существует, создаёт его fclose(File: handle); Функция служит для закрытия работы с файлом входными параметрами являются: handle - ссылка полученная функцией fopen fremove(const name[]); Функция служит для удаления файла, если файл не возможно удалить, то вернёт false входными параметрами являются: name[] - имя включающее в себя и путь до файла fwrite(File: handle, const string[]); Функция служит для записи содержимого массива в файл входными параметрами являются: handle - ссылка полученная функцией fopen string[] - записываемый массив fread(File: handle, string[], size = sizeof string, bool: pack = false); Функция служит для чтения построчно данных из файла входными параметрами являются: handle - ссылка полученная функцией fopen string[] - массив куда будут записываться считанные данные size - количество считываемых в строке байт pack - запаковывать-ли строку(возможно неправильно понял ТК это и не использовал) fexist(const pattern[]); Функция служит для проверки существования файла pattern[] - имя проверяемого файла включающее в себя и путь до файла Ну чтож, на этом я думаю пока что стоит закончить, ТК эти функции являются самыми важными для нас Такт 2. Примеры Давайте приведём пример чтения и записи строки в/из файла: Пример чтения строки из файла Quote stock ReadOneString(file[],tostring[]) { if(!fexist(file)) return -1; /* проверяем наличие файла file, если он не существует то прекращаем выполнение функции и возвращаем значение -1 */ new File:opnfile; // создаём файловую переменную opnfile=fopen(file,io_read); /* открываем файл file с возможностью чтения и записываем его идентификатор в opnfile */ fread(opnfile,tostring); // читаем первую строку из файла и записываем её в tostring fclose(opnfile); // закрываем работу с файлом return 1; // возвращаем 1 давая знать что всё прошло успешно } Пример записи строки в файл Quote stock WriteOneString(tofile[],string[]) { new File:opnfile; // создаём файловую переменную opnfile=fopen(tofile,io_append); /* Открываем файл с параметром io_append, в данном случае он больше всего подходит */ fwrite(opnfile,string); // записываем в файл строку string fclose(opnfile);// закрываем работу с файлом return 1; // возвращаем 1 давая знать что всё прошло успешно } Урок 2. (освоение) В этом уроке мы опишем остальные стандартные функции по работе с файлами Такт 1. Описание функций fputchar(File: handle, value, bool: utf8 = true); Функция служит для записи символа в файл, в случае успешной записи вернёт true, иначе false handle - ссылка полученная функцией fopen value - записываемый символ utf8 - включена-ли поддержка utf8 fgetchar(File: handle, value, bool: utf8 = true); Функция служит для чтения символа из файла handle - ссылка полученная функцией fopen value - идентификатор в который запишется utf8 - включена-ли поддержка utf8 Скоро появится описание: fblockwrite(File: handle, const buffer[], size = sizeof buffer); fblockread(File: handle, buffer[], size = sizeof buffer); fseek(File: handle, position = 0, seek_whence: whence = seek_start); flength(File: handle); fmatch(name[], const pattern[], index = 0, size = sizeof name);
|
| |
|
|
| TaLeRoK | Дата: Четверг, 12.03.2009, 08:49 | Сообщение # 2 |
|
Советчик
Группа:
Продвинутые
Сообщений: 1237
Награды: 14
Город: Гдето там->
Репутация: 138
Замечания: 100%
Статус: 
| Хорошая тема! Помогла! Вот токо я не понел, а как например считывать со 2 и 3 строчки и т п?
|
| |
|
|
| XAOC | Дата: Четверг, 12.03.2009, 12:25 | Сообщение # 3 |
|
Советчик
Группа:
Разработчики
Сообщений: 1190
Награды: 11
Город: Гдета там>>
Репутация: 311
Замечания: 0%
Статус: 
| TaLeRoK, циклом
|
| |
|
|
| XAOC | Дата: Суббота, 14.03.2009, 18:48 | Сообщение # 4 |
|
Советчик
Группа:
Разработчики
Сообщений: 1190
Награды: 11
Город: Гдета там>>
Репутация: 311
Замечания: 0%
Статус: 
| Code stock WriteMoreString(tofile[],string[]) { new File:opnfile; // создаём файловую переменную opnfile=fopen(tofile,io_append); /* Открываем файл с параметром io_append, в данном случае он больше всего подходит */ for(new i=0;i<10;i++){ fwrite(opnfile,string); // записываем в файл строку string 10 раз } fclose(opnfile);// закрываем работу с файлом return 1; // возвращаем 1 давая знать что всё прошло успешно } Добавлено (14.03.2009, 18:48) --------------------------------------------- считывать желательно while-циклом
|
| |
|
|
| [RD]Chez | Дата: Воскресенье, 15.03.2009, 07:43 | Сообщение # 5 |
|
Мастер джэдай
Группа:
Продвинутые
Сообщений: 3687
Награды: 206
Город: St. P
Репутация: 0
Замечания: 20%
Статус: 
| [pwn]stock ClanCheck(playerid) { new player[MAX_PLAYER_NAME]; new filestr[128]; GetPlayerName(playerid, player, sizeof player); new File:file = fopen("Clan.dat",io_read); if (file) { while(fread(file,filestr,sizeof(filestr))) { if (strfind(filestr, player, true) == -1) { SendClientMessage(playerid, COLOR_RED, "|- Вы не состоите в клане [RD], уберите тэг из ника! -|"); return Kick(playerid); } } } return true; }[/pwn]
1 час моей работы стоит минимум 800 рублей для срочных работ. Знаю CodeIgniter, Kohana, втч. кастом(php), Вникаю в Yii. jQuery на должном уровне, немного разбираюсь в RightJS. Алсо, 6 лет павно, 2 года в шарпе, понимаю си и плюсы. Немного ассемблер. Ох**тельный верстальщик какб.
Если ваш заказ потребует неделю работы и вы собираетесь заплатить 100 рублей - лес там ->> ^^^^^
chezrd@gmail.com lance@chez-lab.ru
|
| |
|
|
| XAOC | Дата: Воскресенье, 15.03.2009, 08:13 | Сообщение # 6 |
|
Советчик
Группа:
Разработчики
Сообщений: 1190
Награды: 11
Город: Гдета там>>
Репутация: 311
Замечания: 0%
Статус: 
| G_ROW_Chez, не очень разумный метод, лучше 1 раз подгрузить файл в буффер и далее работать только с буффером
|
| |
|
|
| [RD]Chez | Дата: Воскресенье, 15.03.2009, 11:57 | Сообщение # 7 |
|
Мастер джэдай
Группа:
Продвинутые
Сообщений: 3687
Награды: 206
Город: St. P
Репутация: 0
Замечания: 20%
Статус: 
| XAOC, просто файл все время меняется, и массив определить каким-то числом нельзя
1 час моей работы стоит минимум 800 рублей для срочных работ. Знаю CodeIgniter, Kohana, втч. кастом(php), Вникаю в Yii. jQuery на должном уровне, немного разбираюсь в RightJS. Алсо, 6 лет павно, 2 года в шарпе, понимаю си и плюсы. Немного ассемблер. Ох**тельный верстальщик какб.
Если ваш заказ потребует неделю работы и вы собираетесь заплатить 100 рублей - лес там ->> ^^^^^
chezrd@gmail.com lance@chez-lab.ru
|
| |
|
|
| XAOC | Дата: Воскресенье, 15.03.2009, 12:44 | Сообщение # 8 |
|
Советчик
Группа:
Разработчики
Сообщений: 1190
Награды: 11
Город: Гдета там>>
Репутация: 311
Замечания: 0%
Статус: 
| G_ROW_Chez, а кто мешает создать массив размером к примеру в 1000?
|
| |
|
|
| [RD]Chez | Дата: Воскресенье, 15.03.2009, 16:02 | Сообщение # 9 |
|
Мастер джэдай
Группа:
Продвинутые
Сообщений: 3687
Награды: 206
Город: St. P
Репутация: 0
Замечания: 20%
Статус: 
| XAOC, тогда будет лишние 300-700 строк в любом случае методом эксперимента все решается
1 час моей работы стоит минимум 800 рублей для срочных работ. Знаю CodeIgniter, Kohana, втч. кастом(php), Вникаю в Yii. jQuery на должном уровне, немного разбираюсь в RightJS. Алсо, 6 лет павно, 2 года в шарпе, понимаю си и плюсы. Немного ассемблер. Ох**тельный верстальщик какб.
Если ваш заказ потребует неделю работы и вы собираетесь заплатить 100 рублей - лес там ->> ^^^^^
chezrd@gmail.com lance@chez-lab.ru
|
| |
|
|
| XAOC | Дата: Понедельник, 16.03.2009, 16:27 | Сообщение # 10 |
|
Советчик
Группа:
Разработчики
Сообщений: 1190
Награды: 11
Город: Гдета там>>
Репутация: 311
Замечания: 0%
Статус: 
| G_ROW_Chez, если у тебя хватит ума сделать банальную проверку Quote if(strlen(array[i])==0)break; в цикле, то никаких пустых 300-700 строк не будит
|
| |
|
|
| XAOC | Дата: Вторник, 17.03.2009, 09:42 | Сообщение # 11 |
|
Советчик
Группа:
Разработчики
Сообщений: 1190
Награды: 11
Город: Гдета там>>
Репутация: 311
Замечания: 0%
Статус: 
| G_ROW_Chez, нет, изначально это не поддерживается, но существует плагин YSF
|
| |
|
|
| stepmex | Дата: Вторник, 12.05.2009, 23:52 | Сообщение # 12 |
|
Мастер джэдай
Группа:
Продвинутые
Сообщений: 2914
Награды: 35
Город: Е-бург
Репутация: 1032
Замечания: 0%
Статус: 
| GhostTT, ты думаешь, я в майские праздники писать что-то планировал, я только пъянки спланировал. Добавлено (12.05.2009, 22:53) --------------------------------------------- Косяк в павно, эта сука не различает регистр при работе с файлами создайте в папке scriptfiles фаил test добавте код: [pwn]public OnGameModeInit() { printf("%d",fexist("Test")); printf("%d",fexist("test")); return 1; }[/pwn]и проверте что выдаст  Добавлено (12.05.2009, 23:52) --------------------------------------------- Я обошёл этот баг 
И создал Бог женщину!.. Существо получилось злобное, но симпатичное...
Сообщение отредактировал stepmex - Вторник, 12.05.2009, 22:55 |
| |
|
|
| stepmex | Дата: Среда, 13.05.2009, 14:08 | Сообщение # 13 |
|
Мастер джэдай
Группа:
Продвинутые
Сообщений: 2914
Награды: 35
Город: Е-бург
Репутация: 1032
Замечания: 0%
Статус: 
| Код для различия регистра в именах файлов. Code new chars[65][2] = { "0","1","2","3","4","5","6","7","8","9","[","]","_", //13 "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z", //26 "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z" //26 }; for(new t;t < strlen(name);t++) { for(new i;i < sizeof(chars);i++) { if(chars[i][0] == name[t]){format(string, sizeof(string),"%s%d",string,i);} } }
И создал Бог женщину!.. Существо получилось злобное, но симпатичное...
|
| |
|
|
| stepmex | Дата: Среда, 13.05.2009, 14:25 | Сообщение # 14 |
|
Мастер джэдай
Группа:
Продвинутые
Сообщений: 2914
Награды: 35
Город: Е-бург
Репутация: 1032
Замечания: 0%
Статус: 
| [RD]Chez, записывает не буквы, записывает номер под которым буква находиться в массиве
И создал Бог женщину!.. Существо получилось злобное, но симпатичное...
|
| |
|
|
| ZiG8 | Дата: Среда, 24.06.2009, 13:25 | Сообщение # 15 |
|
Постоялец
Группа:
Пользователи
Сообщений: 338
Награды: 5
Город: Киров
Репутация: 0
Замечания: 100%
Статус: 
| хочу узнать о: fputchar(File: handle, value, bool: utf8 = true); fgetchar(File: handle, value, bool: utf8 = true); fblockwrite(File: handle, const buffer[], size = sizeof buffer); fblockread(File: handle, buffer[], size = sizeof buffer); fseek(File: handle, position = 0, seek_whence: whence = seek_start); Code seek_start seek_current seek_end flength(File: handle); fmatch(name[], const pattern[], index = 0, size = sizeof name);
[b]FilterScripts[/b]: [url=http://www.samp-rus.com/forum/8-10320-181614-16-1302544876][FS] QuidemSys v2.2[/url] [/color]
|
| |
|
|
|
 |
|
 | |
| |
|