Просмотр полной версии : [Вопрос] Работа с mxINI
И снова здрасте.
В общем пару часиков мудрил-мудрил,и домудрить немогу :с
Суть в том что мне надо что-бы у меня данные из файла выводились в диалог-лист.
Если точнее то там система телепортов.
Мне буквально пару примеров опять нужно с объяснением, спасибо. :3
Именно mxINI нужно?
Если файлы то желательно он,но так-же можно и MySQL :3
Актуальность этой темы просто зашкаливает :3
;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 диалога
}
На 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 вообще не пересикался,не мог-бы немного объяснить код?
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).
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).
Благодарю.
И еще кое-что :с
все пошло удачно но я опять запутался,на этот раз проблема с выгрузкой координат из файла в переменную
и загрузкой их из переменной в функцию SetPlayerPos(playerid, Float:x, Float:y, Float:z);
Вот как-то так :help:
;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);
}
Вообще можно было бы 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
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)
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
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot