Всё о сервере, форум!
Основы программирования
ИНФОРМАЦИОННО-РАЗВЛЕКАТЕЛЬНЫЙ ПОРТАЛ

PrR[ Проект SAMP - Romashka [0.3e] ™18+™

Pawn :: Основы скриптинга
Использование split

Допустим, нам нужно сохранить транспорт в файл.

Научимся считывать данные с файла в строках, где указано не 1, а несколько параметров сразу разделенных запятой или другим знаком.
Функция split как раз и отделяет эти параметры.
  • Первый аргумент функции, это строка с параметрами, параметры которой нужно разделить.
  • Второй аргумент функции это двумерный массив, куда нужно поместить извлеченные параметры.
  • Третий аргумент функции, это строка с символом, который разделяет эти параметры. Если указать
  • неправильный символ, функция не сработает.
Для начала в любом месте скрипта пишем эту функцию:

stock split(const strsrc[ ], strdest[ ][ ], delimiter)
{
new i, li;
new aNum;
new len;
while(i <= strlen(strsrc)){
if(strsrc[i]==delimiter || i==strlen(strsrc)){
len = strmid(strdest[aNum], strsrc, li, i, 128);
strdest[aNum][len] = 0;
li = i+1;
aNum++;
}
i++;
}
return 1;
}


Теперь объявим массив enum и глобальную переменную:

enum zInfo
{
Float:zX,
Float:zY,
Float:zZ,
};
new CarInfo[3][zInfo];


Массив zInfo будет хранить считанные с файла данные.
Внутри массива мы объявляем переменные для хранения координат X,Y,Z (zX, zY, zZ).
Сразу обратите внимание.
Чтобы обратиться к переменной из массива zInfo, чтобы передать ее значение другой переменной, нам нужно использовать массив CarInfo.
Первая цифра в квадратных скобках, это количество строк в массиве, во вторых квадратных скобках будет имя ячейке, к которой мы обращаемся, например: zX. То есть обращение к ячейке массива будет выглядеть так: CarInfo[5][zX] (мы обращаемся к 5 строке массива, к ячейке zX.
Саму загрузку данных из файла нужно делать в отдельном public, как показано на примере ниже.

stock LoadCars()
{
new arrCoords[3][64];
new strFromFile2[256];
new File: file = fopen("cars.cfg", io_read);
if (file)
{
new idx;
while (idx < sizeof(CarInfo))
{
fread(file, strFromFile2);
split(strFromFile2, arrCoords, '|');
CarInfo [idx][ zX] = floatstr(arrCoords[0]);
CarInfo [idx][ zY] = floatstr(arrCoords[1]);
CarInfo [idx][ zZ] = floatstr(arrCoords[2]);
idx++;
}
fclose(file);
}
return 1;
}


Idx – это номер строки.
С помощью цикла while мы поочередно считывает с каждой строки файла координаты.

Процесс считывания:
  • Создаем новый массив для временного хранения загруженных данных: arrCords
  • Первая цифра в квадратных скобках должна соответствовать цифре массива CarInfo.
  • Создаем  переменную strFromFile2, куда будет извлекаться полученная из файла строка с параметрами.
  • Дальше мы открываем файл cars.cfg, он должен обязательно существовать в директории scriptfiles, иначе возможен крах сервера (строка 5).
  • После проверки создается переменная для хранения номеров строк (строка 8).
  • После переменной идет цикл while (строки 9-17). В цикле первым делом мы считываем первую строку файла и записываем в переменную: strFromFile2 (строка 11).
  • Параметры в файле должны быть разделены знаком, | так как показано в  скрипте между одинарных кавычек, а иначе данные будут считаны неправильно.
  • Функцией split  отделяем параметры от строки и записываем в массив arrCords по разным ячейкам (строка 12).
  • Дальше копируем считанные данные в массив CarInfo, перед этим обязательно с помощью функции floatstr, мы преобразуем строку, которую мы получили в вещественное число, так как координаты это вещественные числа, а не строки (строки 13-15) и мы их передаем в переменные вещественного типа.
  • В конце массива мы переходим на новую строку и повторяем наш цикл до тех пор, пока цикл не считает 3 строки массива.



Логин: Пароль:
Забыли пароль?Регистрация
При копировании материала с сайта активная ссылка обязательна!
Сайт управляется SiNG cms © 2010-2015