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

Вниз

Непонятка с TStringList, как записать в файл? а потом прочесть   Найти похожие ветки 

 
Net_Prosto   (2004-04-14 11:05) [0]

Здрувствуйте уважаемый кодеры! :) Извеняюсь что отвлекаю Вас от дел, но у меня проблема, которую я не могу решить ни как :(. В файл записываю TStringList, но вот прочитать его ни как не могу. Вот код:

   DescFile=record
     section:string[255];     //Раздел
     Name:string[255];        //Название
     Desc:TStringList;   //Описание
   end;

procedure TfrmMain.DBOpenDesc;
var buf:DescFile;
Begin
 AssignFile(FFile,DBFilePath);
 Reset(FFile);
 mDesc.Lines.Clear; //Объект TMemo

try
 while not Eof(FFile) do
 begin
 buf.Desc:=TStringList.Create;
 Read (FFile, Buf);

   lFileName.Caption:=buf.Name;
   mdesc.Lines.AddStrings(buf.Desc);

 buf.desc.free;
 end;
finally
 CloseFile(FFile);
end;

end;            

Gостоянно выскакивает ошибка в памяти, что делать, очень нужно!


 
Johnmen ©   (2004-04-14 11:26) [1]

А что же ты хочешь, если читаешь из файла адрес Desc ??? Но не содержимое стринглиста ?


 
Vlad ©   (2004-04-14 11:32) [2]

Desc.LoadFromFile ?


 
Aleksandr ©   (2004-04-14 11:59) [3]

Ну, нельзя же читать ссылку. Строка-то обычно читается так:
SetLength(s,i);
F.Read(s[1],i)

А не проще создать потомка от TObjectList и научить его "читать" и "писать" свои итемы? Вообще, со StringList на чтение-запись работать не советую - очень медленно, убедился на практике. Как и с файловыми потоками. Гораздо быстрее загружать в TMemoryStream, а оттуда по-объектно.


 
Net_Prosto   (2004-04-14 13:20) [4]

Попробовал сделать, но ничего не получилось. Может кто подскажет рабочий код?

SetLength(s,i);
F.Read(s[1],i)

не понял это. И как прочитать не адрес из файла, а содержимое?
Очень благодарен за ответы!


 
Aleksandr ©   (2004-04-14 13:48) [5]

Ну, например, как записать в файл, считать из файла эту твою запись:


procedure MyDescFileWriteProc(DescFile : TDescFile);
var
 i,j : integer;
 M   : TMemoryStream;
 b   : byte;
 procedure MyWriteStr(aStr : string);
 begin
   b:=length(aStr); //запоминаем длину строки
   M.Write(b,SizeOf(b));  //записываем ее в файл
   if b>0 then
     M.Write(aStr[1],b)  //записываем саму строку
 end;
begin
 M:=TMemoryStream.Create;
 try
   MyWriteStr(DescFile.Section);
   MyWriteStr(DescFile.Name);
   i:=DescFile.Desc.Count; //приводим кол-во к интежеру
   M.Write(i,SizeOf(i));   //пишем кол-во в файл
   for j:=0 to i-1 do
     MyWriteStr(DescFile.Desc.Strings[i]); //все строчки пишем в файл
   M.Seek(0,0); //смещаемся вначало, а то данные пропадут
   M.SaveToFile("C:\blabla.txt") //сбрасываем на диск
 finally
   M.Free
 end
end;
// а тут все в обратном порядке
procedure MyDescFileReadProc(var DescFile : TDescFile);
var
 i,j : integer;
 M   : TMemoryStream;
 s   : string;
 b   : byte;
 procedure MyReadStr(var aStr : string);
 begin
   M.Read(b,SizeOf(b));
   Setlength(aStr,b);
   if b>0 then
     M.Read(aStr[1],b)
 end;
begin
 M:=TMemoryStream.Create;
 try
   M.LoadFromFile( "C:\blabla.txt");
   M.Seek(0,0);
   MyReadStr(DescFile.Section);
   MyReadStr(DescFile.Name);
   M.Read(i,SizeOf(i));
   DescFile.Desc:=TStringList.Create;
   for j:=0 to i-1 do begin
     MyReadStr(s);
     DescFile.Desc.Add(s)
   end
 finally
   M.Free
 end
end;


 
Net_Prosto   (2004-04-14 23:07) [6]

Большое спасибо за ответ, Aleksandr! Но, у меня не компилируется дальше строки

MyReadStr(DescFile.Section);

пишет: Types of actual and formal var parameters must die identical

как быть?
жду ответа!



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

Форум: "Основная";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.032 c
14-1081847255
juiceman
2004-04-13 13:07
2004.05.02
считалка трафика


3-1081073444
Артем К.
2004-04-04 14:10
2004.05.02
Как в Query определить таблицу Master для таблицы Detail


14-1081759781
Lexer
2004-04-12 12:49
2004.05.02
Характеристика программиста


14-1081276091
Soft
2004-04-06 22:28
2004.05.02
Зачем нужно программирование?


1-1081966538
Netrix
2004-04-14 22:15
2004.05.02
Как зная путь и имя файла определить каким процессом он открыт?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский