Чтение файла

inklesspen

Не пишу модули под LSD :с
Сообщения
1,775
Реакции
967
Я хочу прочитать файл .phy, там KeyValues и не только, я пытался его прочти, юзая KeyValues, но не выходит, хочу прочесть его просто как обычный файл...
Мне нужно найти ключ "modelname", а я вот хз как...
--- Добавлено позже ---
Вот мой код, который выдает это
upload_2016-8-26_22-2-42.png


PHP:
new Handle:file = OpenFile(arg, "r")
    if(file==INVALID_HANDLE)
    {
        PrintToChat(client, "Invalid file")
        return;
    }
    decl String:line[PLATFORM_MAX_PATH];
    while(!IsEndOfFile(file))
    {
        ReadFileLine(file,line,sizeof(line));
        new pos;
        pos = StrContains((line), "\"surfaceprop\"")+12;
        if(pos!=-1)
        {
            for(new i = pos;i<sizeof(line);i++)
            {
                if(line[i]=='\"')
                {
                    decl String:key[64]
                    new pos2 = 0
                    for(new l = i+1;l<sizeof(line);l++)
                    {
                        if(line[l]=='\"')
                        {
                            PrintToChat(client, "Line: %s", line)
                            PrintToChat(client, "Value: %s", key)
                            return;
                        }
                        key[pos2]=line[l]
                        pos2++
                        // PrintToConsole(client, line[l])
                    }
                    PrintToChat(client, "NotFoundValue")
                }
            }
        }
    }
    PrintToChat(client, "null")
[/spoiler]
 
Последнее редактирование:

gibs

Фитиль народного волненья
Сообщения
722
Реакции
407
Мошенник
Это бинарный файл, а не текстовый.
Но вообще, нормальный человек бы загуглил формат файла и написал бы парсер для него.
Поскольку ты пытаешься учиться не шевеля мозгами, то я тебе немножко разжую.
Тут описан формат файла.
Указано, что файл начинается с заголовка, в котором указан размер заголовка, а так же solidCount, которая определяет количество compactsurfaceheader_t, каждый из которого начинается с указания своего размера, и которые следуют после заголовка. И документ заканчивается текстовой секцией, которая тебе и нужна.
В идеале ты должен проскакать всю бинарную часть циклом, а затем скопировать текстовую секцию в строку.
Ну и, разумеется, следует открывать файл в бинарном режиме.
 

inklesspen

Не пишу модули под LSD :с
Сообщения
1,775
Реакции
967
Это бинарный файл, а не текстовый.
Но вообще, нормальный человек бы загуглил формат файла и написал бы парсер для него.
Поскольку ты пытаешься учиться не шевеля мозгами, то я тебе немножко разжую.
Тут описан формат файла.
Указано, что файл начинается с заголовка, в котором указан размер заголовка, а так же solidCount, которая определяет количество compactsurfaceheader_t, каждый из которого начинается с указания своего размера, и которые следуют после заголовка. И документ заканчивается текстовой секцией, которая тебе и нужна.
В идеале ты должен проскакать всю бинарную часть циклом, а затем скопировать текстовую секцию в строку.
Ну и, разумеется, следует открывать файл в бинарном режиме.
Я не думаю, что эта часть бинарная....
upload_2016-8-27_13-48-1.png
 

gibs

Фитиль народного волненья
Сообщения
722
Реакции
407
Мошенник
Ну да, даже не знаю почему я назвал её текстовой секцией.
 

gibs

Фитиль народного волненья
Сообщения
722
Реакции
407
Мошенник
@inklesspen, я немного удивляюсь, я тебе ведь разжевал.
PHP:
bool GetPhyTextData(const char[] szFile, char[] szBuffer, int maxlen)
{
    File file = OpenFile(szFile, "rb");
    if(file == null)
        return false;
  
    int size, solidCount;
    file.ReadInt32(size);
    file.Seek(8, SEEK_SET);
    file.ReadInt32(solidCount);
    file.Seek(size, SEEK_SET);
  
    for (int i = 0, dummy; i < solidCount; i++)
    {
        file.ReadInt32(dummy);
        file.Seek(dummy, SEEK_CUR);
    }
  
    file.ReadString(szBuffer, maxlen);
  
    delete file;
    return true;
}
Вот тебе функция, которая вытягивает из .phy файла szFile текстовую секцию в строку szBuffer. Только что написал и проверил.
 
Сверху Снизу