![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Загрузка StringList из буфера.. [D5, 2000]
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.