Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Загрузка StringList из буфера.. [D5, 2000]


Страницы:   1 2 3

pathfinder ©   (2006-10-24 11:13:00) 

Добрый день.

   Stream := TFileStream.Create(FileIn, fmOpenRead);
   Size := Stream.Size;
   GetMem(Buffer, Size);
   Stream.ReadBuffer(Buffer^, Size);

Подскажите, пожалуйста, как теперь загрузить данные из буфера в стринглист?


pathfinder   (2006-10-25 09:59:00) [1]


> Сергей М. ©   (25.10.06 08:36) [44]

Спасибо.


Сергей М.   (2006-10-25 08:36:00) [2]

Пример гекс-дампа этого файла:

001526E0:  65 3A 20 53 65 72 76 69 │ 63 65 20 65 78 69 74 20   e: Service exit
001526F0:  5B 45 78 69 74 20 63 6F │ 64 65 20 3D 20 30 78 32   [Exit code = 0x2
00152700:  34 30 30 30 31 5D 0D 0A │ 32 30 30 36 2D 30 34 2D   40001]♪◙2006-04-
00152710:  30 34 09 31 31 3A 31 33 │ 3A 30 34 09 20 39 33 36   04○11:13:04○ 936
00152720:  09 33 31 30 09 53 65 72 │ 76 69 63 65 09 2A 2A 2A   ○310○Service○***
00152730:  2A 2A 2A 2A 2A 2A 2A 2A │ 2A 2A 0D 0A 0000 00 00   **********♪◙
00152740:  00 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00
00152750:  00 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00
00152760:  00 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00
00152770:  00 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00
00152780:  00 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00
00152790:  00 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00
001527A0:  00 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00
001527B0:  00 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00
001527C0:  00 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00
001527D0:  00 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00
001527E0:  00 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00
001527F0:  00 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00
00152800:  96 FC FF FF 84 C0 75 13 │ 8B 4D FC 8B 01 EB 04 8B   Ц№  Д└u‼ЛM№Л☺ы♦Л
00152810:  06 8B CE 6A 01 FF 10 33 │ C0 EB 03 8B 45 FC 5F 5E   ♠Л╬j☺ ►3└ы♥ЛE№_^
00152820:  5B C9 C2 04 00 8B C1 D9 │ EE 8B 4C 24 04 8B 11 89   [╔┬♦ Л┴┘юЛL$♦Л◄Й
00152830:  10 8B 49 04 D9 58 08 89 │ 48 04 C2 04 00 8B C1 8B   ►ЛI♦┘X◘ЙH♦┬♦ Л┴Л
00152840:  4C 24 04 8B 11 89 10 8B │ 49 04 89 48 04 8B 4C 24   L$♦Л◄Й►ЛI♦ЙH♦ЛL$

Как видишь, начиная с символа, выделенного жирным, и до конца в файле идут бинарные данные.


Сергей М.   (2006-10-25 08:32:00) [3]


> у стринглиста есть ограничение на количество символов или
> строк?


Есть. Но в дан.случае оно тебя не касается.


> WindowsUpdate.log чуть больше мегабайта - нет


WindowsUpdate.log - не чисто текстовый файл (содержит и текстовые и бинарные данные), потому и возникла с ним проблема.


pathfinder   (2006-10-24 20:18:00) [4]

хотя почему-то чисто текстовый файл больше 7 мб (250000 строк) загрузился, а WindowsUpdate.log чуть больше мегабайта - нет.. Может это связано с какими-то служебными символами..


pathfinder   (2006-10-24 20:12:00) [5]

столкнулся еще и с такой проблемой, что при попытке загрузить в стринглист текст. файла большого размера > 1 мб в стринглисте оказывается только несколько каких-то символов.. А у стринглиста есть ограничение на количество символов или строк?


pathfinder   (2006-10-24 19:45:00) [6]


> Dmitrij_K   (24.10.06 19:17) [39]
> не   Size := Sizeof(S);
> а
>   Size := Length(S);

спасибо!


Dmitrij_K   (2006-10-24 19:17:00) [7]

не   Size := Sizeof(S);
а
  Size := Length(S);


pathfinder   (2006-10-24 17:23:00) [8]

значение Size = 4 , в стринг листе 4 строки сохраняется только часть первой..


Amoeba   (2006-10-24 17:07:00) [9]

А что отладчик показывает относительно значения Size? На каком месте обрывается информация?


pathfinder   (2006-10-24 16:56:00) [10]

что-то никак не могу разобраться..
как сохранить стринглист в буффер
var
 List    : TStringlist;
 Buffer : Pointer;
 S       : string;
begin
   S := List.Text;
   Size := Sizeof(S);
   GetMem(Buffer, Size);
   CopyMemory(Buffer, @S[1], Size);

сохраняется только часть информации из стринглиста..что я не так делаю?


pathfinder   (2006-10-24 15:24:00) [11]

и с Move понял..system.Move(S, Buffer, SizeOf(s));
а что лучше использовать CopyMemory или Move?


pathfinder   (2006-10-24 15:21:00) [12]


> Индексы у строковой переменной означают номер символа, это
> видишь ли массив символов.

понял..это же указатель..на первый символ


Anatoly Podgoretsky   (2006-10-24 15:02:00) [13]

Индексы у строковой переменной означают номер символа, это видишь ли массив символов.


pathfinder   (2006-10-24 14:59:00) [14]

а что означает [1] после @string?
и почему не работает system.Move(@S[1], Buffer, Size);?


Dmitrij_K   (2006-10-24 14:44:00) [15]

п5
String := StringList.Text;
CopyMemory(Buffer, @String[1], Size);


pathfinder   (2006-10-24 14:20:00) [16]

делаю в п.5 следующее
     Stream2 := TMemorystream.Create;
     List.SaveToStream(Stream2);
     Size := Stream2.Size;
     GetMem(Buffer, Size);
     Stream2.ReadBuffer(Buffer^, Size);  <-здесь stream read error :(


pathfinder   (2006-10-24 13:55:00) [17]

Тут суть такая:
var
 Stream  : TFileStream;
 Size    : integer;
 Buffer  : Pointer;
 List : TStringList;
 S   :String;
begin
1. читаю данные из файла в буфер
    Stream := TFileStream.Create(FileIn, fmOpenRead);
    Size := Stream.Size;
    GetMem(Buffer, Size);
    Stream.ReadBuffer(Buffer^, Size);
2. произвожу некоторые манипуляции с ними
    BUffer:=Change(Buffer);
3. Загружаю измененные данные в стринглист
     List:=TstringList.Create;
     SetString(S, PChar(Buffer), Size);
     List.Text := S;
4. произвожу опять некоторые манипуляции
5. Потом надо бы их скопировать в Buffer и произвести с ними манипуляции обратные тем, что были в п.2
6. Сохранить данные из буфера в файл.


Dmitrij_K   (2006-10-24 13:09:00) [18]


> а есть обратная процедура, чтобы измененные данные из стринглиста
> закатать назад в буфер?

StringList.Text - вот тебе буфер
или
StringList.SaveToStream


pathfinder   (2006-10-24 13:09:00) [19]


> Dmitrij_K   (24.10.06 13:05) [23]
> офтоп
> чё, всем в школе задали дом. задание по классу TStringList?
>

если бы в школе:)


Джо   (2006-10-24 13:09:00) [20]

Вот чего я еще в этой ветке не видел, так это объявления переменной Buffer.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо