Форум: "Основная";
Текущий архив: 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