Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2009.11.29;
Скачать: [xml.tar.bz2];

Вниз

Не могу открыть 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.016 c
11-1193486478
D[u]fa
2007-10-27 16:01
2009.11.29
KOL_MCK for Delpi 2007 Turbo worked


15-1254515407
Юрий
2009-10-03 00:30
2009.11.29
С днем рождения ! 3 октября 2009 суббота


1-1225824956
vik2008
2008-11-04 21:55
2009.11.29
Кодировка в RX Lib


2-1255507653
123123
2009-10-14 12:07
2009.11.29
отключить сочетание клавиш


1-1227282908
SpellCaster
2008-11-21 18:55
2009.11.29
Инициализация DLL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский