04:58
ОбновитьСмайлыУправление мини-чатом
МИНИ-ЧАТ
Главная страница!

 



 
          





Рекомендуем:





Последние Файлы GTA 4 Последние Файлы GTA-MP Реклама
Скрипт GTA 4 элементы Watch... 07.09.2014
Ferrari 360 Spider [EPM con... 13.12.2013
Porsche Cayenne Turbo 2012 ... 13.12.2013
Shelby Terlingua Mustang v1... 13.12.2013
Hamann Lamborghini Gallardo... 27.10.2013
[GM] The Big PEN1:LS v2.00 ... 04.12.2017
Dgun (AvnanceRP,SampRP,Dimo... 19.03.2016
SAMP скрипт SX Events (MySQ... 03.03.2016
Карта ASL мэрия для SAMP се... 03.03.2016
AIM для SA-MP 0.3.7 22.02.2016
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Модератор форума: Dima-kun  
Урок по работе с файлами
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 строк cool
в любом случае методом эксперимента все решается



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)
---------------------------------------------
Косяк в павно, эта сука не различает регистр при работе с файлами sick
создайте в папке scriptfiles фаил test
добавте код:
[pwn]public OnGameModeInit()
{
printf("%d",fexist("Test"));
printf("%d",fexist("test"));
return 1;
}[/pwn]и проверте что выдаст sick

Добавлено (12.05.2009, 23:52)
---------------------------------------------
Я обошёл этот баг smile24


И создал Бог женщину!.. Существо получилось злобное, но симпатичное...

Сообщение отредактировал 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, записывает не буквы, записывает номер под которым буква находиться в массиве wink


И создал Бог женщину!.. Существо получилось злобное, но симпатичное...
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]
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск:





 


 


 
Хостинг от uCoz samp.at.ua