PDA

Просмотр полной версии : [Вопрос] Работа с mxINI



[ForD]
25.01.2014, 16:37
И снова здрасте.
В общем пару часиков мудрил-мудрил,и домудрить немогу :с

Суть в том что мне надо что-бы у меня данные из файла выводились в диалог-лист.
Если точнее то там система телепортов.

Мне буквально пару примеров опять нужно с объяснением, спасибо. :3

L0ndl3m
25.01.2014, 16:42
Именно mxINI нужно?

[ForD]
25.01.2014, 16:47
Именно mxINI нужно?

Если файлы то желательно он,но так-же можно и MySQL :3

[ForD]
26.01.2014, 17:38
Актуальность этой темы просто зашкаливает :3

L0ndl3m
26.01.2014, 17:52
;25265']Актуальность этой темы просто зашкаливает :3

На file не пойдёт?



new File: file = fopen("File.txt", io_read); // Вместо File.txt вводишь своё название файла
if(file)
{
new str[128], str2[512];

while(fread(f, str)) strcat(str2, str);

fclose(file);

ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_MSGBOX, "Информация", str2, "Закрыть", ""); // Вместо dialogid вводишь свободный ID диалога

}

[ForD]
26.01.2014, 18:38
На file не пойдёт?



new File: file = fopen("File.txt", io_read); // Вместо File.txt вводишь своё название файла
if(file)
{
new str[128], str2[512];

while(fread(f, str)) strcat(str2, str);

fclose(file);

ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_MSGBOX, "Информация", str2, "Закрыть", ""); // Вместо dialogid вводишь свободный ID диалога

}


вроде норм,но я с file вообще не пересикался,не мог-бы немного объяснить код?

L0ndl3m
26.01.2014, 18:44
new File: file = fopen("File.txt", io_read); // Открываем файл "File.txt" в режиме чтения (io_read)
if(file) // Если файл открылся
{
new str[128], str2[512]; // Создадим два массива, один для чтения строки из файла, а другой для записи всех данных из файла

while(fread(f, str)) strcat(str2, str); // Используя цикл "while" прочитаем все строки из файла, и каждую строку запишем в массив str2

fclose(file); // Закрываем файл

ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_MSGBOX, "Информация", str2, "Закрыть", ""); // Тут думаю понятно :D
}


Если не понятна функция fread, то можешь почитать про неё здесь: Тык (http://pro-pawn.ru/showthread.php?4285).

[ForD]
26.01.2014, 19:16
new File: file = fopen("File.txt", io_read); // Открываем файл "File.txt" в режиме чтения (io_read)
if(file) // Если файл открылся
{
new str[128], str2[512]; // Создадим два массива, один для чтения строки из файла, а другой для записи всех данных из файла

while(fread(f, str)) strcat(str2, str); // Используя цикл "while" прочитаем все строки из файла, и каждую строку запишем в массив str2

fclose(file); // Закрываем файл

ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_MSGBOX, "Информация", str2, "Закрыть", ""); // Тут думаю понятно :D
}


Если не понятна функция fread, то можешь почитать про неё здесь: Тык (http://pro-pawn.ru/showthread.php?4285).

Благодарю.

[ForD]
27.01.2014, 10:43
И еще кое-что :с

все пошло удачно но я опять запутался,на этот раз проблема с выгрузкой координат из файла в переменную
и загрузкой их из переменной в функцию SetPlayerPos(playerid, Float:x, Float:y, Float:z);

Вот как-то так :help:

DeimoS
27.01.2014, 11:10
;25313']И еще кое-что :с

все пошло удачно но я опять запутался,на этот раз проблема с выгрузкой координат из файла в переменную
и загрузкой их из переменной в функцию SetPlayerPos(playerid, Float:x, Float:y, Float:z);

Вот как-то так :help:
Вообще можно было бы sscanf использовать, но можно и 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;
}
Использование

new Coords[5][20];//Глобальный массив (5 - число переменных для хранения данных и 30 - число ячеек для хранения данных)


new File: file = fopen("File.txt", io_read);
if(file)
{
new str[128];
while(fread(file, str, sizeof(str))) split(str, Coords, ',');//Ищем в строке "str" запятую (можно разделять любым другим символом) и записываем данные в Coords
fclose(file);
}

[ForD]
27.01.2014, 11:36
Вообще можно было бы sscanf использовать, но можно и 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;
}
Использование

new Coords[5][20];//Глобальный массив (5 - число переменных для хранения данных и 30 - число ячеек для хранения данных)


new File: file = fopen("File.txt", io_read);
if(file)
{
new str[128];
while(fread(file, str, sizeof(str))) split(str, Coords, ',');//Ищем в строке "str" запятую (можно разделять любым другим символом) и записываем данные в Coords
fclose(file);
}

Открыл тему,посмотрел код,вспотел мозг..

В общем с использованием более-менее понятно,распиши сток пожалуйста :3
Спасибо:3

DeimoS
27.01.2014, 16:21
stock split(const strsrc[], strdest[][], delimiter)//Тут и так ясно, думаю
{
new i, li;
new aNum;
new len;
while(i <= strlen(strsrc)){
//Запускаем цикл с условием "пока i меньше или равно числу символов в переменной strsrc"...
if(strsrc[i]==delimiter || i==strlen(strsrc)){
//Проверяем наличие разделителя и конец строки в определённой ячейке от переменной strsrc
len = strmid(strdest[aNum], strsrc, li, i, 128);
//Извлекаем текст до разделителя и записываем в переменную номер ячейки перед разделителем
strdest[aNum][len] = 0;
//Обнуляем ячейку, которую вернул strmid, тем самым удаляя текст с нулевой ячейки и до ячейки с разделителем
li = i+1;
//i хранит ячейку с разделителем, поэтому чтоб при следующем разе эту самую ячейку не учитывать, прибавим к номеру ячейки единицу и запишем в переменную (используется в strmid)
aNum++;
//Прибавляем единицу к переменной, которая служит "указателем" для определения ячейки в массиве strdest (обеспечивает то, что данные до и после разделителя записываются в разные ячейки)
}
i++;
//Начинаем новый такт, проверяя следующую ячейку с символом
}
return 1;
}
Ну вот, как-то так. Не слишком подробно, ибо времени нет. Надеюсь поймёшь :)

Salvacore
27.01.2014, 17:03
stock split(const strsrc[], strdest[][], delimiter)//Тут и так ясно, думаю
{
new i, li;
new aNum;
new len;
while(i <= strlen(strsrc)){
//Запускаем цикл с условием "пока i меньше или равно числу символов в переменной strsrc"...
if(strsrc[i]==delimiter || i==strlen(strsrc)){
//Проверяем наличие разделителя и конец строки в определённой ячейке от переменной strsrc
len = strmid(strdest[aNum], strsrc, li, i, 128);
//Извлекаем текст до разделителя и записываем в переменную номер ячейки перед разделителем
strdest[aNum][len] = 0;
//Обнуляем ячейку, которую вернул strmid, тем самым удаляя текст с нулевой ячейки и до ячейки с разделителем
li = i+1;
//i хранит ячейку с разделителем, поэтому чтоб при следующем разе эту самую ячейку не учитывать, прибавим к номеру ячейки единицу и запишем в переменную (используется в strmid)
aNum++;
//Прибавляем единицу к переменной, которая служит "указателем" для определения ячейки в массиве strdest (обеспечивает то, что данные до и после разделителя записываются в разные ячейки)
}
i++;
//Начинаем новый такт, проверяя следующую ячейку с символом
}
return 1;
}
Ну вот, как-то так. Не слишком подробно, ибо времени нет. Надеюсь поймёшь :)

Быстрее split (http://pro-pawn.ru/showthread.php?5603-l_split%28const-source-dest-const-delimiter-length-sizeof%28dest-%29&highlight=l_split)

[ForD]
27.01.2014, 20:56
stock split(const strsrc[], strdest[][], delimiter)//Тут и так ясно, думаю
{
new i, li;
new aNum;
new len;
while(i <= strlen(strsrc)){
//Запускаем цикл с условием "пока i меньше или равно числу символов в переменной strsrc"...
if(strsrc[i]==delimiter || i==strlen(strsrc)){
//Проверяем наличие разделителя и конец строки в определённой ячейке от переменной strsrc
len = strmid(strdest[aNum], strsrc, li, i, 128);
//Извлекаем текст до разделителя и записываем в переменную номер ячейки перед разделителем
strdest[aNum][len] = 0;
//Обнуляем ячейку, которую вернул strmid, тем самым удаляя текст с нулевой ячейки и до ячейки с разделителем
li = i+1;
//i хранит ячейку с разделителем, поэтому чтоб при следующем разе эту самую ячейку не учитывать, прибавим к номеру ячейки единицу и запишем в переменную (используется в strmid)
aNum++;
//Прибавляем единицу к переменной, которая служит "указателем" для определения ячейки в массиве strdest (обеспечивает то, что данные до и после разделителя записываются в разные ячейки)
}
i++;
//Начинаем новый такт, проверяя следующую ячейку с символом
}
return 1;
}
Ну вот, как-то так. Не слишком подробно, ибо времени нет. Надеюсь поймёшь :)

Огромедное спасибо! :3

[ForD]
28.01.2014, 10:56
можно закрывать тему.

Osetin
28.01.2014, 22:53
Закрыто!