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

Вниз

Вопрос по поводу записи в файлы   Найти похожие ветки 

 
deep.one   (2003-08-17 15:45) [0]

Скажи пожалуйста, как можно записать в файл записи стрингов больше 256символов? То есть, я хочу записать в файл содержимое RichEdit.Lines.CommaText.


 
pasha_golub   (2003-08-17 15:55) [1]

TFileStream
or
RichEdit.lines.SaveToFile


 
deep.one   (2003-08-17 16:53) [2]

Нет, мне нужно именно в File of blah-blah... в типизированный файл то есть :)


 
Palladin   (2003-08-17 17:45) [3]


> Скажи пожалуйста

Это ты кому?


 
deep.one   (2003-08-17 23:23) [4]

Cорри, опечатка... спешу-с...


 
Palladin   (2003-08-18 00:04) [5]

спешиш-с :) уже около 5 часов спешиш-с

собственно проблема в чем...
в том чтот типизированный файл работает с записями имеющими фиксированный размер... что в случае RichEdit совсем не имеет место, ибо длинна текста это не что то постоянное

Выход (только я конечно не совсем понимаю на кой черт тебе это надо, но раз надо дык надо), разбить текст на записи фиксированной длинны и писать их.

type
PByteArray=^TByteArray;
TByteArray=array [0..255] of byte;

procedure StupidTextSave(p_strFileName,p_strText:string);
var
f:file of TByteArray;
u:PByteArray;
i:integer;
begin
AssignFile(f,p_strFileName);Rewrite(f);
for i:=1 to Length(p_strText) div SizeOf(TByteArray) do
begin
u:=@p_strText[(i-1)*SizeOf(TByteArray)+1];
write(f,u^);
end;
if Length(p_strText) mod SizeOf(TByteArray)<>0 then
begin
new(u);
i:=Length(p_strText) div SizeOf(TByteArray);
move(p_strText[i*SizeOf(TByteArray)+1],u^,Length(p_strText) mod SizeOf(TByteArray));
u^[Length(p_strText) mod SizeOf(TByteArray)+1]:=0;
write(f,u^);
dispose(u);
end;
CloseFile(f);
end;

function StupidTextLoad(p_strFileName:string):string;
var
f:file of TByteArray;
u:TByteArray;
s:string;
begin
Result:="";
SetLength(s,SizeOf(TByteArray));
AssignFile(f,p_strFilename);Reset(f);
while not eof(f) do
begin
Read(f,u);
move(u,s[1],sizeof(u));
result:=result+s;
end;
CloseFile(f);
end;


Як пользоватся? Дык просто:

Сохранение
StupidTextSave("c:\test.txt",RichEdit1.Lines.Text);
Загрузка
RichEdit1.Lines.Text:=StupidTextLoad("c:\test.txt");

ЗЫ: И все же, в чем же прикол то? А?


 
Marser   (2003-08-18 01:56) [6]

А если {$H+}?


 
Palladin   (2003-08-18 07:06) [7]


> Marser © (18.08.03 01:56) [6]

В смысле?


 
app   (2003-08-18 07:31) [8]

Marser © (18.08.03 01:56) [6]
Вопрос можно ли применить это к TRichEdit?
А в его ничего не пройдет, он хочет типизированный файл, где элементы строки больше 256символов
Если очень хочет, но это странно, то можно создать тип array[1..N] of char и тогда можно создать file of этот тип
Приведет это к нехорошим последствиям, будет много неиспользованого места в файле и некоторые строки придется обрезать по границе N-1 если они не будут влезать.


 
deep.one   (2003-08-18 09:46) [9]

Palladin, cпасибо.. просто хочу написать своего рода записную книжку, которая будет содержать много "листов", однако хочу чтобы она сохраняла все в один файл, на самом деле можно бы было просто RichEdit.Lines.CommaText поочерёдно переписать в файл, но я хотел бы добавить еще поля к файлу... к приеру "пароль", а если это будет текстовый файл, то пароль выдрать будет во много раз проще


 
Palladin   (2003-08-18 10:02) [10]

Стоит задуматся над TFileStream, тогда будет еще проще, тебе всего лишь остается к каждому листу "прицепить" объект TStringList - содержащий поля... и вся твоя запись с полями сведется к записи строк "листа" и к записи строк объекта с полями...


 
deep.one   (2003-08-18 19:33) [11]

Да, интересно... спасибо, попробую... а как связать все ТStringList"ы между собой в поток?


 
Song   (2003-08-18 20:06) [12]

TStringList.SaveToStream
потом потоки объединяешь (TStream.Write) и записываешь в файл - TStream.SaveToFile()


 
Palladin   (2003-08-18 22:19) [13]

Нет, не совсем так, ибо если занести все записаные TStringList в поток, то при последующем чтении первый же TStringList.LoadFromStream загрузи всё и поля и остальные строки. Что не приемлимо. Следует организовать разделение между потоками строк.
Думай. И воздастса тебе :)


 
deep.one   (2003-08-19 00:06) [14]

Ладно, большое спасибо... буду пытаться :))


 
VID   (2003-08-19 01:38) [15]

MemoryStrem:TMemoryStream;
FileStream:TFileStream;
I:Integer;
.....
{Запись в файл}
FileStream.Position := 0;

//Начало цикла
MemoryStream.Clear;
StringList.SaveToStream(MemoryStream);
I:=MemoryStream.Size;
FileStream.Write(I, 4);
MemoryStream.Position := 0;
FileStream.CopyFrom(MemoryStream, MemoryStream.Size);
MemoryStream.Clear;
//Конец цикла
//В файл аписан первый StringList

{Чтение из файла}
FileStream.Position := 0;
//Начало цикла
FileStream.Read(I, 4);
MemoryStream.Clear;
MemoryStream.CopyFrom(FileStream, I);
MemoryStream.Position := 0;
StringList.LoadFromStream(MemoryStream);
MemoryStream.Clear;
//Конец цикла
//Прочитан первый StringList


 
Palladin   (2003-08-19 07:26) [16]


> VID © (19.08.03 01:38) [15]

Гениально, а сразу в FileStream писать не судьба?



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

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

Наверх





Память: 0.48 MB
Время: 0.01 c
1-1428
lightix
2003-08-19 11:52
2003.09.01
Динамическое меню


14-1650
Khloo!
2003-08-11 13:42
2003.09.01
База данных...


1-1425
INTAARI
2003-08-19 14:06
2003.09.01
Масивы перекрываются!!!


14-1616
Девелопер
2003-08-13 15:09
2003.09.01
Загадка для девелоперов


14-1671
Marser
2003-08-12 11:56
2003.09.01
Ну вот, уже две страницы





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