![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как текст из Memo "запихать" в array [0..2000] of Char
Zahar © (2004-10-15 01:16:00)Есть запись:
type
Profile = record
Name,Email,Subject,URL,Tile,Image: String[255];
Msg: array [0..2000] of Char;
end;
В поля Name,Email,Subject,URL,Tile,Image информация берется из элементов Edit.Text. В Msg хочу запихать текст из элемента Memo.
Кто подскажет как это можно сделать.
Дело в том, что эту запись мне потом нужно сохранить в файл (PF: file of Profile)
jack128 (2004-10-15 04:19:00) [1]jack128 © (15.10.04 4:18) [23]
4 утра..На орфографию прошу не смотреть.. Спок ночи.
jack128 (2004-10-15 04:18:00) [2]for i:=1 to length(Memo1.lines.Text)-1 do
QQ.Msg[i]:=Memo1.Lines.Text[i];
Ребят, ну что это такое :-( .. Ну давайте еще побИтно копировать данные, а?? Уж не говоря о том, тот если в мемо будет больше 2000 символов - будет AV. И вообще - советую взглянуть на реализацию свойства Text. Это - самая тормазнутая реализация, какую только можно представить..
uses
Math;
var
s: string;
Len: Integer;
begin
// Сохранение
s := Memo1.Lines.Text;
Len := Min(High(QQQ.Msg), Length(s));
Move(PChar(s)^, QQQ.Msg[0], Len);
QQQ.Msg[Len] := #0; // признак конца строки
// Загрузка
Memo1.Lines.Text := PChar(@QQQ.Msg[0]);
end;
Германн (2004-10-15 04:08:00) [3]2 Defunct © (15.10.04 03:57) [20]
> Почему бы и нет?
Ну, во первых, тебя могут не понять.
Во-вторых, поиск по Яндексу, Gooogl'у и т.д. и т.п. может либо не привести ни к чему, либо привести к тем, которые тебе не нужны (врядли нужны)!
Defunct (2004-10-15 03:59:00) [4]гимор/гиморой звучит более убедительно и главное никак не связоно с медицинским термином. ;)
Defunct (2004-10-15 03:57:00) [5][19]
опс, пардон, случайно скопировал фразы мне не принадлежащие..
должно быть так:
> Давай все же не будем изобретать новые сущности!
Почему бы и нет?
гиморой - (на научном языке) - способ, который очень сложно решает простую задачу.
гиморой - (на базарном языке) - делать что-либо через ж..
(C) def
Defunct (2004-10-15 03:54:00) [6]> Давай все же не будем изобретать новые сущности!
Почему бы и нет?
гемор(геморрой) - (на научном языке) - способ, который очень сложно решает простую задачу.
гемор(геморрой) - (на базарном языке) - делать что-либо через ж..
(С) def
Германн (2004-10-15 03:52:00) [7]2 Defunct © (15.10.04 03:35) [17]
Давай все же не будем изобретать новые сущности!
Имхо:
гемор(геморрой) - (на научном языке) - способ, который очень сложно решает простую задачу.
гемор(геморрой) - (на базарном языке) - делать что-либо через ж..
Defunct (2004-10-15 03:35:00) [8]> 2. Что есть гиморой?
гиморой - (на научном языке) - способ, который очень сложно решает простую задачу.
гиморой - (на базарном языке) - делать что-либо через ж..
Defunct (2004-10-15 03:23:00) [9]Zahar (15.10.04 03:03) [13]
Смотрите, я бы сделал хотя бы так:
type
TProfile = Record
Name : String;
Email : String;
Subject : String;
URL : String;
Tile : String;
Image : String;
Msg : String;
End;
A : Array of TProfile;
// Сохранение всех профилей
Procedure TForm1.Save;
Var I:Integer;
Begin
Memo1.Clear;
For I:=0 To Length(A)-1 Do
Begin
Memo1.Lines.Add('[%%%%РАЗДЕЛИТЕЛЬ%%%%]');
Memo1.Lines.Add( A[i].Name );
Memo1.Lines.Add( A[i].EMail );
...
Memo1.Lines.Add( A[i].Msg );
End;
Memo1.SaveToFile;
End;
// Загрузка профилей
Procedure TForm1.Load;
Var I,J:Integer;
Begin
Memo1.LoadFromFile;
I := 0; J:=0;
While I < Memo1.Lines.Count-1 Do
Begin
If Memo1.Lines.Strings[i] = '[%%%%РАЗДЕЛИТЕЛЬ%%%%]' Then
Try
Inc(J);
SetLength(A, J);
A[j-1].Name := Memo1.Lines.Strings[i+1];
A[j-1].EMail := Memo1.Lines.Strings[i+2];
...
A[j-1].Msg := Memo1.Lines.Strings[i+x]; // x - кол-во записываемых полей в вашем случае x = 7
I := I + 7;
Except
I := Memo1.Lines.Count;
End;
Inc(i);
End;
End;
Примечание: код писал "на коленке" возможны ошибки, главное принцип.
Германн (2004-10-15 03:11:00) [10]2 Zahar (15.10.04 03:03) [13]
А где именно "выдается ошибка:
[Error]: Invalid typecast" ?
Германн (2004-10-15 03:07:00) [11]Не понял!
1. Причем тут #10
2. Что есть гиморой?
Геморрой - не советую его испытывать никому!
Zahar (2004-10-15 03:03:00) [12]
> Defunct
Мне сохранять нужно было не только текст из Memo, но и другую информацию, где Memo сохраняется в Profile.Msg.
type
Profile = record
Name,Email,Subject,URL,Tile,Image: String[255];
Msg: array [0..2000] of Char;
end;
> Германн
При таком методе выдается ошибка:
[Error]: Invalid typecast
Defunct (2004-10-15 02:55:00) [13]Zahar, маешься ты откровенной мутью.
Возьми да сохрани весь текст, зачем придумывать какой-то левый массив байт?
Загони в Memo все строки из твоего Profile и выполни команду
Memo.Lines.SaveToFile()
точно также и загружай
Memo.Lines.LoadFromFile()
Риторический вопрос...
Почему некоторые так любит искать гиморой там где его нет и обязательно его находит?
Германн (2004-10-15 02:48:00) [14]Имхо.
Может я не прав. А что мешает функциям:
PChar(QQ.Msg):=Memo1.Lines.Text;
и
Memo1.Lines.Text:=PChar(QQ.Msg);
?
Zahar (2004-10-15 02:45:00) [15]THX to all (особенно to GanibalLector).
Вопрос исчерпан.
GanibalLector (2004-10-15 02:41:00) [16]for i:=1 to 2000 do
begin
if QQ.Msg[i]<>#10 then
Memo1.Lines.Text:=Memo1.Lines.Text+QQ.Msg[i];
end; end;
Zahar (2004-10-15 02:32:00) [17]
for i:=1 to 2000 do Memo1.Lines.Text:=Memo1.Lines.Text+QQ.Msg[i];
Thanks еще раз огромное. Возникла только одна проблема - лишние пустые строки.
Например было:
123
456
789
После преобразования туду-сюда:
123
456
789
Кто подскажет где копать?
GanibalLector (2004-10-15 02:29:00) [18]for i:=1 to 2000 do Memo1.Lines.Text:=Memo1.Lines.Text+QQ.Msg[i];
Zahar (2004-10-15 02:22:00) [19]
for i:=1 to length(Memo1.lines.Text)-1 do
QQ.Msg[i]:=Memo1.Lines.Text[i];
Этот вариант сработал. Огромное спасибо.
А вариантMsg:=PChar(Memo.Lines.Text)
выдал ошибку:
[Error]: Incompatible types: 'Array' and 'PAnsiChar'
А как проделать обратную операцию. Из Msg вернуть текст в Memo?
GanibalLector (2004-10-15 02:11:00) [20]2 GuAV [4]
Будет Incompatible types: 'Array' and 'Pchar'