Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.11.29;
Скачать: CL | DM;

Вниз

Не могу открыть 5-мбайтный ини файл с помощью - TMemIniFile   Найти похожие ветки 

 
IgorT ©   (2008-11-18 21:02) [0]

Есть два ини файла. Один большой, на 38 тыс строк, под 5 мб - старый, и второй, строк на 200 - новый... как переенсти все обновления и новые ключи и секции в старый инишник с нового ?

Вопрос решил с использованием TIniFile, но в таком случае комп очч долго обновляет файл (висит с минутку). Мне посоветовали использовать TMemIniFile . Но почемуто, теперь не могу открыть большой файл, тоесть кажется открываю, вот токо в результате получается вместо старого файла - копия нового (старый файл перезаписывается почемуто без открытыя). Если пробую ето выполнить с маленькими инишниками (на пару строк), то все ок.

Вот мой скрипт :


MyIniFile6 :=TMemIniFile.Create("new.ini");
MyIniFile7:=TMemIniFile.Create("original.ini");
     StringList := TStringList.Create;
     StringList2 := TStringList.Create;

     MyIniFile6.ReadSections(StringList);

     for i:=0 to StringList.Count-1 do
       begin
       MyIniFile6.ReadSectionValues(StringList[i],StringList2);
          for m:=0 to StringList2.Count-1 do
           begin
                    MyIniFile7.WriteString(StringList[i],StringList2[m],MyIniFile6.ReadString(String List[i],StringList2[m],"Off"));
           end;
       end;

MyIniFile7.UpdateFile;        
MyIniFile6.Free;
MyIniFile7.Free;
StringList.Clear;
StringList2.Clear;


Пожалуйста, помогите разобраться в чем причина (думаю буффера чтоли мало чтобы загрузить файл, если да то как его увеличить ?).


 
Сергей М. ©   (2008-11-18 21:55) [1]


> большой, на 38 тыс строк, под 5 мб


Это каким же .. нужно быть, чтобы учудить такой ini !)


 
IgorT ©   (2008-11-18 22:06) [2]

В проге хочу реализовать обслуживания файла языков одной популярной игры... А файл языков как раз етот ини... что нить порекомендуете как лучше сделать ?


 
Германн ©   (2008-11-19 00:24) [3]


> IgorT ©   (18.11.08 21:02)  

И всё же поставь проверку if FileExists(Полное_имя_"original.ini") then.
Или лучше пройдись отладчиком с влючённой опцией Use Debug DCU"s.


 
IgorT ©   (2008-11-19 02:20) [4]


> И всё же поставь проверку if FileExists(Полное_имя_"original.
> ini") then.


if (FindFirst(fpatch+"Data\"+blast+"\stringtable.ini",faAnyFile ,SearchRec)=0) then
       begin
       MyIniFile6 := TMemIniFile.Create(modpath[k+1]+"stringtableMod.ini");
       MyIniFile7 := TMemIniFile.Create(fpatch+"Data\"+blast+"\stringtable.ini");
       StringList := TStringList.Create;
       StringList2 := TStringList.Create;

       MyIniFile6.ReadSections(StringList);

       for i:=0 to StringList.Count-1 do
         begin
         MyIniFile6.ReadSectionValues(StringList[i],StringList2);
            for m:=0 to StringList2.Count-1 do
             begin
             MyIniFile7.WriteString(StringList[i],StringList2[m],MyIniFile6.ReadString(String List[i],StringList2[m],"Off"));
             end;
         end;
       MyIniFile7.UpdateFile;
       MyIniFile6.Free;
       MyIniFile7.Free;
       StringList.Clear;
       StringList2.Clear;
       end;


Вот, сделал так... все тоже самое...


 
Германн ©   (2008-11-19 02:31) [5]


> IgorT ©   (19.11.08 02:20) [4]


> if (FindFirst(fpatch+"Data\"+blast+"\stringtable.ini",faAnyFile
> ,SearchRec)=0) then
>

х.м. Я предлагал несколько другую проверку. if FileExists. А твоя проверка с аттрибутом faAnyFile даёт несколько иной результат.


 
Slym ©   (2008-11-19 04:55) [6]

IgorT ©   (18.11.08 21:02)
MyIniFile6,MyIniFile7,StringList2  

Ну и названия...
удобочитаемо никак?
var
 NewIni,OriginalIni:TMemIniFile;
 SectionsList,ValuesList:TStringList;
 Section,Value:string;
 i,j:integer;
begin
 NewIni :=TMemIniFile.Create("new.ini");
 OriginalIni:=TMemIniFile.Create("original.ini");
 try
   SectionsList:=TStringList.Create;
   ValuesList:= TStringList.Create;
   try
     NewIni.ReadSections(SectionsList);
     for i:=0 to SectionsList.Count-1 do
     begin
       Section:=SectionsList[i];
       NewIni.ReadSectionValues(Section,ValuesList);
       for j:=0 to ValuesList.Count-1 do
       begin
         Value:=ValuesList[j];
         OriginalIni.WriteString(Section,Value,NewIni.ReadString(Section,Value,"Off"));
       end;
     end;
   finally
     SectionsList.Free;
     ValuesList.Free;
   end;
   OriginalIni.UpdateFile;
 finally
   NewIni.Free;
   OriginalIni.Free;
 end;
end;


 
IgorT ©   (2008-11-19 18:09) [7]


> var
>  NewIni,OriginalIni:TMemIniFile;
>  SectionsList,ValuesList:TStringList;
>  Section,Value:string;
>  i,j:integer;
> begin
>  NewIni :=TMemIniFile.Create("new.ini");
>  OriginalIni:=TMemIniFile.Create("original.ini");
>  try
>    SectionsList:=TStringList.Create;
>    ValuesList:= TStringList.Create;
>    try
>      NewIni.ReadSections(SectionsList);
>      for i:=0 to SectionsList.Count-1 do
>      begin
>        Section:=SectionsList[i];
>        NewIni.ReadSectionValues(Section,ValuesList);
>        for j:=0 to ValuesList.Count-1 do
>        begin
>          Value:=ValuesList[j];
>          OriginalIni.WriteString(Section,Value,NewIni.ReadString(Section,
> Value,"Off"));
>        end;
>      end;
>    finally
>      SectionsList.Free;
>      ValuesList.Free;
>    end;
>    OriginalIni.UpdateFile;
>  finally
>    NewIni.Free;
>    OriginalIni.Free;
>  end;
> end;


Все тоже самое... оригинальный файл снова заменился новым... тоесть не стал писать уже в существующий а удалил и написал по новой...


> х.м. Я предлагал несколько другую проверку. if FileExists.
>  А твоя проверка с аттрибутом faAnyFile даёт несколько иной
> результат.
>


Ок, поставил ваш вариант, ничего не изменилось...


 
Smile   (2008-11-19 18:25) [8]

Не хватает слов, да и кое-чего другого:(
Я, конечно, далеко не профи, но для меня 5 гб ini, какой-то ...
Нет, не буду, не хватает ни слов , ни эмоций
Наверно я слишком стар (типа отстал от реальности)


 
IgorT ©   (2008-11-19 18:30) [9]

да нет, не 5 гб, просто 5 мб...


 
Palladin ©   (2008-11-19 18:42) [10]

5ти мегабайтный, да даже 100 килобайтный, INI файл - это нонсес, это как стикер-напоминалка на мониторе в 4-5 листов формата A3... если конечно такое случилось, что само по себе дико, нужно свой парсер написать, для доступа к данным... и вообще отказатся от такого вида доступа к таким объемам...


 
Германн ©   (2008-11-19 18:49) [11]


> IgorT ©   (19.11.08 18:09) [7]

Ну а что насчет отладчика? Пробовал?


 
KilkennyCat ©   (2008-11-20 00:51) [12]


> стикер-напоминалка на мониторе в 4-5 листов формата A3

хорошая идея!
надо реализовать.


 
Германн ©   (2008-11-20 01:10) [13]


> Palladin ©   (19.11.08 18:42) [10]

Там собс-но и не ини-файл. Просто кто-то решил пойти по пути всеми уважаемого Christian Ghisler"a. (Который тоже дельфист :) И реализовать "многоязычность" программы через ини-файлы. Но не учёл, что вышеназванный знал что делает.
А проблема автора, как выяснилось, заключалась в том, что тот 5-метровый файл имел unicod-кодировку.


 
IgorT ©   (2008-11-20 22:02) [14]

Угу, действительно . Вся проблема заключалась в юникоде. Всем спасибо за поддержку ! Вопрос закрыт.


 
Amoeba ©   (2008-11-21 13:23) [15]


> Германн ©   (20.11.08 01:10) [13]


> А проблема автора, как выяснилось, заключалась в том, что
> тот 5-метровый файл имел unicod-кодировку.

Как узнал, ясновидец?


 
Германн ©   (2008-11-21 13:35) [16]


> Amoeba ©   (21.11.08 13:23) [15]
>
>
> > Германн ©   (20.11.08 01:10) [13]
>
>
> > А проблема автора, как выяснилось, заключалась в том,
> что
> > тот 5-метровый файл имел unicod-кодировку.
>
> Как узнал, ясновидец?
>

http://forum.sources.ru/index.php?showtopic=256598&view=showall


 
Anatoly Podgoretsky ©   (2008-11-21 14:45) [17]

> Германн  (21.11.2008 13:35:16)  [16]

То есть не ясновидец, а шпион



Страницы: 1 вся ветка

Текущий архив: 2009.11.29;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.013 c
2-1255329098
yantux
2009-10-12 10:31
2009.11.29
Сработало исключение EOutOfMemory: как оптимизировать память?


15-1253984448
@!!ex
2009-09-26 21:00
2009.11.29
Я разобрал ноутбук... как его собрать??


2-1255358930
Nutz
2009-10-12 18:48
2009.11.29
Визуальное отбражение кода


2-1255360512
Johnnnnn
2009-10-12 19:15
2009.11.29
убрать выскакивающее окно asynchronous socket error?


2-1255596140
Маркабес
2009-10-15 12:42
2009.11.29
SQL