Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];
ВнизЗагрузка StringList из буфера.. Найти похожие ветки
← →
pathfinder (2006-10-24 11:13) [0]Добрый день.
Stream := TFileStream.Create(FileIn, fmOpenRead);
Size := Stream.Size;
GetMem(Buffer, Size);
Stream.ReadBuffer(Buffer^, Size);
Подскажите, пожалуйста, как теперь загрузить данные из буфера в стринглист?
← →
Dmitrij_K (2006-10-24 11:18) [1]StringList.LoadFromStream(Stream);
ку?
← →
pathfinder (2006-10-24 11:21) [2]Т.е. содержимое буфера которое мы заполняем методом ReadBuffer и собственно Stream в LoadFromStream есть одно и то же?
← →
Сергей М. © (2006-10-24 11:24) [3]
> Т.е. содержимое буфера которое мы заполняем методом ReadBuffer
Метод TStream.ReadBuffer не заполняет буфер, а читает из буфера
← →
Джо © (2006-10-24 11:25) [4]> [2] pathfinder (24.10.06 11:21)
> Т.е. содержимое буфера которое мы заполняем методом ReadBuffer
> и собственно Stream в LoadFromStream есть одно и то же?
А вот ты посмотри на реализацию TStringList.LoadFromStream. Это несложно, достаточно, удерживая контрол, щелкнуть на TStringList в тексте программы.
← →
Джо © (2006-10-24 11:27) [5]> [3] Сергей М. © (24.10.06 11:24)
>
> > Т.е. содержимое буфера которое мы заполняем методом ReadBuffer
>
>
> Метод TStream.ReadBuffer не заполняет буфер, а читает из
> буфера
Нет, он пишет данные В буфер.
← →
pathfinder (2006-10-24 11:27) [6]
> Сергей М. © (24.10.06 11:24) [3]
>
> > Т.е. содержимое буфера которое мы заполняем методом ReadBuffer
>
>
> Метод TStream.ReadBuffer не заполняет буфер, а читает из
> буфера
мм.. "ReadBuffer (public) Reads bytes from the stream into Buffer. " Borland® Copyright © 2005 Borland Software Corporation. All rights reserved.
← →
Dmitrij_K (2006-10-24 11:27) [7]
> Метод TStream.ReadBuffer не заполняет буфер, а читает из
> буфера
может вы ошибаетесь?
Reads bytes from the stream into Buffer.
???
← →
pathfinder (2006-10-24 11:29) [8]
> Dmitrij_K (24.10.06 11:27) [7]
>
> > Метод TStream.ReadBuffer не заполняет буфер, а читает
> из
> > буфера
>
> может вы ошибаетесь?
> Reads bytes from the stream into Buffer.
> ???
тогда уж не я..а Borland)
← →
Dmitrij_K (2006-10-24 11:47) [9]pathfinder
я не к вам обращался
← →
pathfinder (2006-10-24 12:08) [10]
> Dmitrij_K (24.10.06 11:47) [9]
> pathfinder
> я не к вам обращался
да..это я невнимательно прочитал ваше сообщение..
← →
pathfinder (2006-10-24 12:18) [11]Получается теперь чтобы загрузить данные из Buffer в StringList надо создать новый поток MemoryStream, а потом уже из него делать StringList.LoadFromStream(Stream)?
← →
Dmitrij_K (2006-10-24 12:21) [12]
> Получается теперь чтобы загрузить данные из Buffer в StringList
> надо создать новый поток MemoryStream
Нет!
Можно из любого наследника Tsteam у кого есть метод Read()
напримет
TFileStream TMemoryStream
← →
Джо © (2006-10-24 12:26) [13]>
>
> [11] pathfinder (24.10.06 12:18)
> Получается теперь чтобы загрузить данные из Buffer в StringList
> надо создать новый поток MemoryStream, а потом уже из него
> делать StringList.LoadFromStream(Stream)?
Откуда у тебя данные в Buffer появляются?
← →
pathfinder (2006-10-24 12:30) [14]Аа..получается, что экземпляр TStream это как ссылка на какие-то данные, которые читаются из внешнего источника в буфер. А при использовании методаTStrings.LoadFromStream данные будут опять читаться из файла ассоциированного с экз. TFileStream. Как ReadBuffer, только не в буфер, а в стринглист..
А если я прочитал данные из файла в буфер, а потом изменил буффер
Stream := TFileStream.Create(FileIn, fmOpenRead);
Size := Stream.Size;
GetMem(Buffer, Size);
Stream.ReadBuffer(Buffer^, Size);
Buffer:=Change(Buffer);
то как мне теперь загрузить в стринглист данные именно из Buffer, а не читать их опять из файла?
← →
Dmitrij_K (2006-10-24 12:36) [15]
> то как мне теперь загрузить в стринглист данные именно из
> Buffer
Без дополнительных преобразований никак
← →
Dmitrij_K (2006-10-24 12:38) [16]
var S:String;
SetString(S, Pointer(Buffer), Size);
StringList.SetTextStr(S);
← →
Сергей М. © (2006-10-24 12:44) [17]
> Джо © (24.10.06 11:27) [5]
Да. согласен.
Заклинило меня что-то.
← →
pathfinder (2006-10-24 12:53) [18]
> Dmitrij_K (24.10.06 12:38) [16]
> var S:String;
> SetString(S, Pointer(Buffer), Size);
> StringList.SetTextStr(S);
Это вместо LoadFromStream значит?
только вот на SetTextStr появляется undeclared identifier..
← →
Dmitrij_K (2006-10-24 12:55) [19]тогда так
var S:String;
SetString(S, Pointer(Buffer), Size);
StringList.Test := S
← →
Джо © (2006-10-24 12:55) [20]> только вот на SetTextStr появляется undeclared identifier..
StringList.Text := S;
← →
pathfinder (2006-10-24 13:00) [21]точно..заработало
SetString(S, PChar(Buffer), Size);
List.Text := S;
← →
pathfinder (2006-10-24 13:00) [22]спасибо!
← →
Dmitrij_K (2006-10-24 13:05) [23]офтоп
чё, всем в школе задали дом. задание по классу TStringList?
← →
pathfinder (2006-10-24 13:07) [24]а есть обратная процедура, чтобы измененные данные из стринглиста закатать назад в буфер?
← →
pathfinder (2006-10-24 13:08) [25]Или надо создавать новый поток и использовать метод TStrings.SaveToStream?
← →
pathfinder (2006-10-24 13:09) [26]
> Dmitrij_K (24.10.06 13:05) [23]
> офтоп
> чё, всем в школе задали дом. задание по классу TStringList?
>
если бы в школе:)
← →
Джо © (2006-10-24 13:09) [27]Вот чего я еще в этой ветке не видел, так это объявления переменной Buffer.
← →
Dmitrij_K (2006-10-24 13:09) [28]
> а есть обратная процедура, чтобы измененные данные из стринглиста
> закатать назад в буфер?
StringList.Text - вот тебе буфер
или
StringList.SaveToStream
← →
pathfinder (2006-10-24 13:55) [29]Тут суть такая:
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. Сохранить данные из буфера в файл.
← →
pathfinder (2006-10-24 14:20) [30]делаю в п.5 следующее
Stream2 := TMemorystream.Create;
List.SaveToStream(Stream2);
Size := Stream2.Size;
GetMem(Buffer, Size);
Stream2.ReadBuffer(Buffer^, Size); <-здесь stream read error :(
← →
Dmitrij_K (2006-10-24 14:44) [31]п5
String := StringList.Text;
CopyMemory(Buffer, @String[1], Size);
← →
pathfinder (2006-10-24 14:59) [32]а что означает [1] после @string?
и почему не работает system.Move(@S[1], Buffer, Size);?
← →
Anatoly Podgoretsky © (2006-10-24 15:02) [33]Индексы у строковой переменной означают номер символа, это видишь ли массив символов.
← →
pathfinder (2006-10-24 15:21) [34]
> Индексы у строковой переменной означают номер символа, это
> видишь ли массив символов.
понял..это же указатель..на первый символ
← →
pathfinder (2006-10-24 15:24) [35]и с Move понял..system.Move(S, Buffer, SizeOf(s));
а что лучше использовать CopyMemory или Move?
← →
pathfinder (2006-10-24 16:56) [36]что-то никак не могу разобраться..
как сохранить стринглист в буффер
var
List : TStringlist;
Buffer : Pointer;
S : string;
begin
S := List.Text;
Size := Sizeof(S);
GetMem(Buffer, Size);
CopyMemory(Buffer, @S[1], Size);
сохраняется только часть информации из стринглиста..что я не так делаю?
← →
Amoeba © (2006-10-24 17:07) [37]А что отладчик показывает относительно значения Size? На каком месте обрывается информация?
← →
pathfinder (2006-10-24 17:23) [38]значение Size = 4 , в стринг листе 4 строки сохраняется только часть первой..
← →
Dmitrij_K (2006-10-24 19:17) [39]не Size := Sizeof(S);
а
Size := Length(S);
← →
pathfinder (2006-10-24 19:45) [40]
> Dmitrij_K (24.10.06 19:17) [39]
> не Size := Sizeof(S);
> а
> Size := Length(S);
спасибо!
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.04 c