
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.21] |
![]() |
|
![]() |
|
|
Вот код:
![]() ![]() procedure TForm1.sButton1Click(Sender: TObject); var rr : TReader; tw : TWriter; f, rf : textfile; s, cr : string; i : integer; size : longint; buf : Pointer; rc : TResourceStream; fs : TFileStream; ms : TMemoryStream; db : array[1..150000] of string; begin i := 1; rc := TResourceStream.Create(hInstance,'rc_dt', RT_RCDATA); ms := TMemoryStream.Create; ms.SetSize(20000000); ms.CopyFrom(rc, rc.Size); ms.Seek(0,0); rr := TReader.Create(ms, 4096); rr.ReadListBegin; while not rr.EndOfList do begin s := rr.ReadString; db[i] := s; inc(i); end; rr.ReadListEnd; rr.Free; rc.Free; if FileExists('data.tmp') then DeleteFile('data.tmp'); ShowMessage(db[1]); ShowMessage(IntToStr(size)); end; Ошибка "Invalid property value" выдаётся на строке rr.ReadListBegin; ![]() Моя цель - это построчно считать данные из потока и занести их в массив. |
![]() |
Сообщ.
#2
,
|
|
а что в потоке? dfm?
если да, то какой(binary/text)? |
Сообщ.
#3
,
|
|
|
В потоке текстовый файл, а что есть разница ?
![]() |
Сообщ.
#4
,
|
|
|
Может у кого есть какие нибудь мысли как решить проблему ?
|
![]() |
Сообщ.
#5
,
|
|
Цитата bur80 @ В потоке текстовый файл, а что есть разница ? да, TReader ожидает, что в потоке содержится необходимая служебная информация, т.е. файл в ресурсе имеет необходимый формат(dfm) вот такой файл, например: ![]() ![]() object Test: TTest List = ( 'A' 'B' 'C') end можно прочитать так: ![]() ![]() Procedure ReadTextDFM(ResName:String;List:TStrings); Var RS,MS:TStream; R:TReader; begin List.Clear; RS:=TResourceStream.Create(hInstance,ResName,RT_RCDATA); Try MS:=TMemoryStream.Create; Try ObjectTextToBinary(RS,MS); MS.Position:=0; R:=TReader.Create(MS,1024); Try R.ReadSignature; R.ReadStr; //TTest R.ReadStr; //Test R.ReadStr; //List R.ReadListBegin; While Not R.EndOfList Do List.Append(R.ReadString); R.ReadListEnd; R.ReadListEnd; Finally R.Free; End; Finally MS.Free; End; Finally RS.Free; End; End; только зачем эта морока с TReader? прочитай ресурс в строку и уже её расковыривай... |
Сообщ.
#6
,
|
|
|
Смахивает на то что rr.ReadListBegin; + rr.ReadListEnd; не нужны.
Если ваш ресурс это просто текст - то точно не нужны, в противном случае предоставьте код записи в этот поток коотрый в ресурсе, или хотя бы дамп этого ресурса. |
Сообщ.
#7
,
|
|
|
Shaggy, я решил эту проблему по другому. Я из потока данные загружаю в StringList и уже с ним работаю.
-Added Цитата alex_sporik @ Смахивает на то что rr.ReadListBegin; + rr.ReadListEnd; не нужны. Если ваш ресурс это просто текст - то точно не нужны, в противном случае предоставьте код записи в этот поток коотрый в ресурсе, или хотя бы дамп этого ресурса. Тут проблема была, по всей видимости, в том что ресурс он как бы текст, но зашифрованный и поэтому из-за недопустимых символов в тексте поток не читался. |