Проблемы с загрузкой данных из файла
#1

Вот сижу уже около трёх часов. Многое перепробовал но безуспешно.
Есть система загрузки домов. Раньше она работала а сейчас не знаю в чём дело.
Файл после сохранения (без загрузки) выглядит так:
PHP код:
ID 1 Aizov|None|140.365127|-71.522949|1.429687|0|1|0|0|0|2315.000000|-1626.099975|3657.399902|0.000000|0.000000|103.858001|0|2314.500000|-1628.400024|3661.000000|0.000000|0.000000|103.858001|0|2311.800048|-1623.699951|3657.399902|0.000000|0.000000|90.000000|0|2312.300048|-1630.800048|3657.399902|0.000000|0.000000|121.074996|0|2318.100097|-1630.099975|3657.399902|0.000000|0.000000|234.087997|0|2311.500000|-1627.500000|3661.000000|0.000000|0.000000|57.020000|1492|2315.800048|-1617.900024|3657.399902|0.000000|0.000000|0.000000|0|2314.899902|-1630.800048|3657.399902|0.000000|0.000000|180.000000|0|2315.000000|-1625.699951|3658.399902|0.000000|0.000000|222.145996 
Сохраняет все отлично. Но загрузка происходит не так как нужно. После загрузки сохраняем и:
PHP код:
ID 1 Aizov|None|140.365127|-71.522949|1.429687|0|1|0|0|0|2315.0000001626.099975|3657.399902|0.000000|0.000000|103.858001|0|2314.500    
||1.429687|0|1|0|0|0|2315.0000001626.099975|3657.399902|0.000000|0.000000|103.858001|0|2314.500    
[IMG]http://i.imgur.com/WGSqkhF.png[/IMG] 
Мои паблики:
PHP код:
LoadHouses()
{
    if(!
fexist("houses/m_h.ini"))return print("[Ошибка] Файл houses/m_h.ini не найден"); // Проверяем наличие файла в scriptfiles/houses (если не найден, в лог сервера выдаст ошибку)
    
new f=ini_openFile("houses/m_h.ini"); // открываем файл
    
ini_getInteger(f,"Amount",m_h); // получаем точное значение созданных домов
    
ini_closeFile(f); // закрываем этот файл
    
if(!fexist("houses/houses.ini"))return print("[Ошибка] Файл houses/houses.ini не найден"); // проверяем наличие файла houses.ini в той же директории.
    
f=ini_openFile("houses/houses.ini"); // открываем его
    
new str[8]; // создаем небольшой массив для дальнейшего форматирования строки (ключа в файле)
    
for(new h=1;h<=m_h;h++) // запускаем цикл
    
{
        
format(str,sizeof(str),"ID %d",h); // форматируем строку для ключа в файле
        
ini_getString(f,str,STR); // получаем данные в виде строки
        
printf("%s",STR);
        
sscanf(STR,"p<|>s[32]s[24]fffdddddffffffdffffffdffffffdffffffdffffffdffffffdffffffdffffffdffffff",
        
House[h][hDesc],
        
House[h][hOwner],
        
House[h][hX],
        
House[h][hY],
        
House[h][hZ],
        
House[h][hInterior],
        
House[h][hVirtWorld],
        
House[h][hPrice],
        
House[h][hLock],
        
House[h][hTable],//10
        
House[h][hXt],
        
House[h][hYt],
        
House[h][hZt],
        
House[h][hrXt],
        
House[h][hrYt],
        
House[h][hrZt],//
        
House[h][hBed],
        
House[h][hXb],
        
House[h][hYb],
        
House[h][hZb],
        
House[h][hrXb],
        
House[h][hrYb],
        
House[h][hrZb],
        
House[h][hChair],//
        
House[h][hXc],
        
House[h][hYc],
        
House[h][hZc],
        
House[h][hrXc],
        
House[h][hrYc],
        
House[h][hrZc],//30
        
House[h][hChair2],
        
House[h][hXc2],
        
House[h][hYc2],
        
House[h][hZc2],
        
House[h][hrXc2],
        
House[h][hrYc2],
        
House[h][hrZc2],
        
House[h][hChair3],//
        
House[h][hXc3],
        
House[h][hYc3],
        
House[h][hZc3],
        
House[h][hrXc3],
        
House[h][hrYc3],
        
House[h][hrZc3],
        
House[h][hChair4],//
        
House[h][hXc4],
        
House[h][hYc4],
        
House[h][hZc4],
        
House[h][hrXc4],
        
House[h][hrYc4],
        
House[h][hrZc4],
        
House[h][hDoor],
        
House[h][hXd],
        
House[h][hYd],
        
House[h][hZd],
        
House[h][hrXd],
        
House[h][hrYd],
        
House[h][hrZd],
        
House[h][hCupboard],
        
House[h][hXu],
        
House[h][hYu],
        
House[h][hZu],
        
House[h][hrXu],
        
House[h][hrYu],
        
House[h][hrZu],
        
House[h][hTV],
        
House[h][hXv],
        
House[h][hYv],
        
House[h][hZv],
        
House[h][hrXv],
        
House[h][hrYv],
        
House[h][hrZv]
        );
        if(!
strcmp(House[h][hOwner],"None",true)) // Сравниваем строки если владелец дома == None значит дом не куплен (в дальнейшем при создании владелец дома будет равен None)
        
{
            
House[h][hPick]=CreateDynamicPickup(1273,23,House[h][hX],House[h][hY],House[h][hZ],0); // Создаем пикап дома
            
format(STR,sizeof(STR),"[Дом продается]\nУлица: %s\nНомер дома: %d\nЦена: $%d",House[h][hDesc],h,House[h][hPrice]); // Форматируем строку для 3D текста
            
House[h][hText]=CreateDynamic3DTextLabel(STR,0xFFFFFFFF,House[h][hX],House[h][hY],House[h][hZ]+0.5,10.0,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,1); // Создаем 3D текст
        
}
        else 
// Иначе, если владелец дома не равен None, значит дом куплен
        
{
            
House[h][hPick]=CreateDynamicPickup(1272,23,House[h][hX],House[h][hY],House[h][hZ],0); // Создаем пикап дома (модель пикапа уже другая)
            
format(STR,sizeof(STR),"[Дом]\nУлица: %s\nНомер: %d\nВладелец: %s",House[h][hDesc],h,House[h][hOwner]); // форматируем строку
            
House[h][hText]=CreateDynamic3DTextLabel(STR,0xFFFFFFFF,House[h][hX],House[h][hY],House[h][hZ]+0.5,10.0,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,1); // И создаем 3D текст с информацией
        
}
        
House[h][HouseFurniture][0] = CreateDynamicObject(House[h][hTable],House[h][hXt],House[h][hYt],House[h][hZt],House[h][hrXt],House[h][hrYt],House[h][hrZt],House[h][hVirtWorld]); //Стол
        
House[h][HouseFurniture][1] = CreateDynamicObject(House[h][hBed],House[h][hXb],House[h][hYb],House[h][hZb],House[h][hrXb],House[h][hrYb],House[h][hrZb],House[h][hVirtWorld]); //Кровать
        
House[h][HouseFurniture][2] = CreateDynamicObject(House[h][hChair],House[h][hXc],House[h][hYc],House[h][hZc],House[h][hrXc],House[h][hrYc],House[h][hrZc],House[h][hVirtWorld]); //Стул
        
House[h][HouseFurniture][3] = CreateDynamicObject(House[h][hChair2],House[h][hXc2],House[h][hYc2],House[h][hZc2],House[h][hrXc2],House[h][hrYc2],House[h][hrZc2],House[h][hVirtWorld]); //Стул 2
        
House[h][HouseFurniture][4] = CreateDynamicObject(House[h][hChair3],House[h][hXc3],House[h][hYc3],House[h][hZc3],House[h][hrXc3],House[h][hrYc3],House[h][hrZc3],House[h][hVirtWorld]); //Стул 3
        
House[h][HouseFurniture][5] = CreateDynamicObject(House[h][hChair4],House[h][hXc4],House[h][hYc4],House[h][hZc4],House[h][hrXc4],House[h][hrYc4],House[h][hrZc4],House[h][hVirtWorld]); //Стул 4
        
House[h][HouseFurniture][6] = CreateDynamicObject(House[h][hDoor],House[h][hXd],House[h][hYd],House[h][hZd],House[h][hrXd],House[h][hrYd],House[h][hrZd],House[h][hVirtWorld]); //Дверь
        
House[h][HouseFurniture][7] = CreateDynamicObject(House[h][hCupboard],House[h][hXu],House[h][hYu],House[h][hZu],House[h][hrXu],House[h][hrYu],House[h][hrZu],House[h][hVirtWorld]); //Шкаф
        
House[h][HouseFurniture][8] = CreateDynamicObject(House[h][hTV],House[h][hXv],House[h][hYv],House[h][hZv],House[h][hrXv],House[h][hrYv],House[h][hrZv],House[h][hVirtWorld]); //Телевизор
    
}
    
ini_closeFile(f); // Закрываем фай
    
return printf("Loaded %d houses",m_h); // В лог чата возвращаем кол-во загруженных домов
}
SaveHouse(h// Функция для сохранения данных дома в файл
{
    new 
f=ini_openFile("houses/houses.ini"); // открываем файл
    
new str[8]; // создаем массив для форматирования строки (для ключа, как в предыдущем случае)
    
format(str,8,"ID %d",h); // форматируем строку
    
format(STR,sizeof(STR),"%s|%s|%f|%f|%f|%d|%d|%d|%d|%d|%f|%f|%f|%f|%f|%f|%d|%f|%f|%f|%f|%f|%f|%d|%f|%f|%f|%f|%f|%f|%d|%f|%f|%f|%f|%f|%f|%d|%f|%f|%f|%f|%f|%f|%d|%f|%f|%f|%f|%f|%f|%d|%f|%f|%f|%f|%f|%f|%d|%f|%f|%f|%f|%f|%f|%d|%f|%f|%f|%f|%f|%f",//71
    
House[h][hDesc],
    
House[h][hOwner],
    
House[h][hX],
    
House[h][hY],
    
House[h][hZ],
    
House[h][hInterior],
    
House[h][hVirtWorld],
    
House[h][hPrice],
    
House[h][hLock],
    
House[h][hTable],//10
    
House[h][hXt],
    
House[h][hYt],
    
House[h][hZt],
    
House[h][hrXt],
    
House[h][hrYt],
    
House[h][hrZt],
    
House[h][hBed],
    
House[h][hXb],
    
House[h][hYb],
    
House[h][hZb],
    
House[h][hrXb],
    
House[h][hrYb],
    
House[h][hrZb],
    
House[h][hChair],
    
House[h][hXc],
    
House[h][hYc],
    
House[h][hZc],
    
House[h][hrXc],
    
House[h][hrYc],
    
House[h][hrZc],//30
    
House[h][hChair2],
    
House[h][hXc2],
    
House[h][hYc2],
    
House[h][hZc2],
    
House[h][hrXc2],
    
House[h][hrYc2],
    
House[h][hrZc2],
    
House[h][hChair3],
    
House[h][hXc3],
    
House[h][hYc3],
    
House[h][hZc3],
    
House[h][hrXc3],
    
House[h][hrYc3],
    
House[h][hrZc3],
    
House[h][hChair4],
    
House[h][hXc4],
    
House[h][hYc4],
    
House[h][hZc4],
    
House[h][hrXc4],
    
House[h][hrYc4],
    
House[h][hrZc4],
    
House[h][hDoor],
    
House[h][hXd],
    
House[h][hYd],
    
House[h][hZd],
    
House[h][hrXd],
    
House[h][hrYd],
    
House[h][hrZd],
    
House[h][hCupboard],
    
House[h][hXu],
    
House[h][hYu],
    
House[h][hZu],
    
House[h][hrXu],
    
House[h][hrYu],
    
House[h][hrZu],
    
House[h][hTV],
    
House[h][hXv],
    
House[h][hYv],
    
House[h][hZv],
    
House[h][hrXv],
    
House[h][hrYv],
    
House[h][hrZv]
    );
    
ini_setString(f,str,STR); // записываем данные
    
ini_closeFile(f); // закрываем файл
    
return 1;
}
UpdateHouse(h// Эта функция для обновления дома (например при его покупке / продаже мы будем ее использовать)
{
    
DestroyDynamicPickup(House[h][hPick]); // Удаляем пикап
    
new STR3d[256];
    if(!
strcmp(House[h][hOwner],"None",true)) // Опять проверяем на владельца дома, если его нет тогда:
    
{
        
House[h][hPick]=CreateDynamicPickup(1273,23,House[h][hX],House[h][hY],House[h][hZ],0); // пикап
        
format(STR3d,128,"[Дом продается]\nУлица: %s\nНомер: %d\nЦена: $%d",House[h][hDesc],h,House[h][hPrice]); // форматируем строку
        
Update3DTextLabelText(House[h][hText],0xFFFFFFFF,STR3d); // ОБНОВЛЯЕМ ранее созданный 3D текст (который создался при загрузке дома)
    
}
    else 
// если есть владелец (купили дом)
    
{
        
House[h][hPick]=CreateDynamicPickup(1272,23,House[h][hX],House[h][hY],House[h][hZ],0); // пикап
        
format(STR3d,128,"[Дом]\nУлица: %s\nНомер:%d\nВладелец: %s",House[h][hDesc],h,House[h][hOwner]); // форматируем строку
        
Update3DTextLabelText(House[h][hText],0xFFFFFFFF,STR3d); // обновляем 3D текст
    
}

Reply
#2

Код вроде без ошибок, но можете ли скинуть код ini_setString - думаю ошибка там?

К тому же объясните использование этого стороннего Г****, когда есть надежные нативы (fopen(), fwrite() и fclose() )?
Reply
#3

Вместо всех %f напиши %.3f.
Reply
#4

Quote:
Originally Posted by Mutha_X
Посмотреть сообщение
Код вроде без ошибок, но можете ли скинуть код ini_setString - думаю ошибка там?

К тому же объясните использование этого стороннего Г****, когда есть надежные нативы (fopen(), fwrite() и fclose() )?
Это же mx_ini. Он должен все открывать
Reply
#5

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
Вместо всех %f напиши %.3f.
В смысле? Там через каждые пару строчек пишется %d. 6 координат и опять %d
Reply
#6

Quote:
Originally Posted by Aizov
Посмотреть сообщение
В смысле? Там через каждые пару строчек пишется %d. 6 координат и опять %d
Reply
#7

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
Вообще-то первые три координаты это вход. Там поворот не нужен. Вроде все правильно.
Или ты имеешь ввиду что их заменит соответственно %.3f и %.6f
Reply
#8

Quote:
Originally Posted by Aizov
Посмотреть сообщение
Вообще-то первые три координаты это вход. Там поворот не нужен. Вроде все правильно.
Или ты имеешь ввиду что их заменит соответственно %.3f и %.6f
Начнем с простого, ты в курсе что будет если прописать %.3f?

Полагаю что нет, поэтому читай Синтаксис строки форматирования
Reply
#9

Не помогло. Я не пойму из-за чего такое может быть?
Сделал вот такое:
Это извлечённая строкаSTR)
PHP код:
Aizov|None|136.792|-65.802|1.570|0|1|0|0|0|2315.000|-1626.099|3657.398|0.000|0.000|103.858|0|2314.500|-1628.400|3661.000|0.000|0.000|103.858|0|2311.800|-1623.699|3657.398|0.000|0.000|90.000|0|2312.300|-1630.800|3657.398|0.000|0.000|121.074|0|2318.100|-1630.099|3657.398|0.000|0.000|234.087|0|2311.500|-1627.500|3661.000|0.000|0.000|57.020|1492|2315.800|-1617.900|3657.398|0.000|0.000|0.000|0|2314.898|-1630.800|3657.398|0.000|0.000|180.000|0|2315.000|-1625.699|3658.398|0.000|0.000|222.145
Это каждый параметр выводил:
(
PHP код:
printf("Это каждые данные отдельно: %s%s%.3f%.3f%.3%f%d%d%d%d%d%.3f%.3f%.3f%.3f%.3f%.3fd%.3f%.3f%.3f%.3f%.3f%.3fd%.3f%.3f%.3f%.3f%.3f%.3f%d%.3f%.3f%.3f%.3f%.3f%.3f%d%.3f%.3f%.3f%.3f%.3f%.3f%d%.3f%.3f%.3f%.3f%.3f%.3f%d%.3f%.3f%.3f%.3f%.3f%.3f%d%.3f%.3f%.3f%.3f%.3f%.3f%d%.3f%.3f%.3f%.3f%.3f%.3f",
        
House[h][hDesc],
        
House[h][hOwner],
        
House[h][hX],
        
House[h][hY],
        
House[h][hZ],
        
House[h][hInterior],
        
House[h][hVirtWorld],
        
House[h][hPrice],
        
House[h][hLock],
        
House[h][hTable],//10
        
House[h][hXt],
        
House[h][hYt],
        
House[h][hZt],
        
House[h][hrXt],
        
House[h][hrYt],
        
House[h][hrZt],//
        
House[h][hBed],
        
House[h][hXb],
        
House[h][hYb],
        
House[h][hZb],
        
House[h][hrXb],
        
House[h][hrYb],
        
House[h][hrZb],
        
House[h][hChair],//
        
House[h][hXc],
        
House[h][hYc],
        
House[h][hZc],
        
House[h][hrXc],
        
House[h][hrYc],
        
House[h][hrZc],//30
        
House[h][hChair2],
        
House[h][hXc2],
        
House[h][hYc2],
        
House[h][hZc2],
        
House[h][hrXc2],
        
House[h][hrYc2],
        
House[h][hrZc2],
        
House[h][hChair3],//
        
House[h][hXc3],
        
House[h][hYc3],
        
House[h][hZc3],
        
House[h][hrXc3],
        
House[h][hrYc3],
        
House[h][hrZc3],
        
House[h][hChair4],//
        
House[h][hXc4],
        
House[h][hYc4],
        
House[h][hZc4],
        
House[h][hrXc4],
        
House[h][hrYc4],
        
House[h][hrZc4],
        
House[h][hDoor],
        
House[h][hXd],
        
House[h][hYd],
        
House[h][hZd],
        
House[h][hrXd],
        
House[h][hrYd],
        
House[h][hrZd],
        
House[h][hCupboard],
        
House[h][hXu],
        
House[h][hYu],
        
House[h][hZu],
        
House[h][hrXu],
        
House[h][hrYu],
        
House[h][hrZu],
        
House[h][hTV],
        
House[h][hXv],
        
House[h][hYv],
        
House[h][hZv],
        
House[h][hrXv],
        
House[h][hrYv],
        
House[h][hrZv]); 
)
Дало такой результат:
PHP код:
[14:27:32Это каждые данные отдельноAizov|None|136.792|-65.802|1.570|0|1|0|0|0|2315.000|-1626.099|3657.398|0.000|0.000|103.858|0|2314.500|-1628.400|3661.000|0.000|0.000|103.858|0|2311.800|-1623.699|3657.398|0.000|0.000|90.000|0|2312.300|-1630.800|3657.398|0.000|0.000|121.074|0|2318.100|-1630.099|3657.398|0.000|0.000|234.087|0|2311.500|-1627.500|3661.000|0.000|0.000|57.020|1492|2315.800|-1617.900|3657.398|0.000|0.000|0.000|0|2314.898|-1630.800|3657.398|0.000|0.000|180.000|0|2315.000|-1625.699|3658.398|0.000|0.000|222.145||0|1|0|0|0|2315.000|-1626.099|3657.398|0.000|0.000|103.858|0|2314.500|-1628.400|3661.000|0.000|0.000|103.858|0|2311.800|-1623.699|3657.398|0.000|0.000|90.000|0|2312.300|-1630.800|3657.398|0.000|0.000|121.074|0|2318.100|-1630.099|3657.398|0.000|0.000|234.087|0|2311.500|-1627.500|3661.000|0.000|0.000|57.020|1492|2315.800|-1617.900|3657.398|0.000|0.000|0.000|0|2314.898|-1630.800|3657.398|0.000|0.000|180.000|0|2315.000|-1625.699|3658.398|0.000|0.000|222.145|0.0000.000%f485757124510.0000.0000.0000.0000.0000.000d0.0000.0000.0000.0000.0000.000d0.0000.0000.0000.0000.0000.000560.0000.0000.0000.0000.0000.0001240.0000.0000.0000.0000.0000.000490.0000.0000.0000.0000.0000.0001240.0000.0000.0000.0000.0000.0001240.0000.0000.0000.0000.0000.000480.0000.0000.0000.0000.0000.000 
Переменная STR:
new STR[1048];
Reply
#10

Тебя в выводе разделители не смущают?
В коде их нет.
Reply
#11

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
Тебя в выводе разделители не смущают?
В коде их нет.
Слушай. Я делал систему по мануалу http://pawn-wiki.ru/index.php?/topic...v-s-0-chast-1/
Все вроде работало.
Reply
#12

Я полностью разочарован в жизни. 2 дня моих страданий были из-за старой версии инклюда sscanf. Жизнь боль
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)