Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.31;
Скачать: CL | DM;

Вниз

Как текст из Memo "запихать" в array [0..2000] of Char   Найти похожие ветки 

 
Zahar   (2004-10-15 01:16) [0]

Есть запись:
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)


 
Defunct ©   (2004-10-15 01:23) [1]

Memo.Lines.Text


 
Zahar   (2004-10-15 01:59) [2]


> Memo.Lines.Text


Если я пытаюсь сделать следующее: Msg:=Memo.Lines.Text;
то получаю ошибку:

[Error]: Incompatible types: "Array" and "String"


 
GanibalLector ©   (2004-10-15 02:07) [3]

for i:=1 to length(Memo1.lines.Text)-1 do
QQ.Msg[i]:=Memo1.Lines.Text[i];


 
GuAV ©   (2004-10-15 02:08) [4]


> Msg:=Memo.Lines.Text

Msg:=PChar(Memo.Lines.Text)


 
GanibalLector ©   (2004-10-15 02:11) [5]

2 GuAV  [4]
Будет  Incompatible types: "Array" and "Pchar"


 
Zahar   (2004-10-15 02:22) [6]


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:29) [7]

for i:=1 to 2000 do Memo1.Lines.Text:=Memo1.Lines.Text+QQ.Msg[i];


 
Zahar   (2004-10-15 02:32) [8]

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:41) [9]

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:45) [10]

THX to all (особенно to GanibalLector).
Вопрос исчерпан.


 
Германн ©   (2004-10-15 02:48) [11]

Имхо.
Может я не прав. А что мешает функциям:

PChar(QQ.Msg):=Memo1.Lines.Text;
и
Memo1.Lines.Text:=PChar(QQ.Msg);

?


 
Defunct ©   (2004-10-15 02:55) [12]

Zahar, маешься ты откровенной мутью.
Возьми да сохрани весь текст, зачем придумывать какой-то левый массив байт?

Загони в Memo все строки из твоего Profile и выполни команду
Memo.Lines.SaveToFile()

точно также и загружай
Memo.Lines.LoadFromFile()

Риторический вопрос...
Почему некоторые так любит искать гиморой там где его нет и обязательно его находит?


 
Zahar   (2004-10-15 03:03) [13]


> 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


 
Германн ©   (2004-10-15 03:07) [14]

Не понял!
1. Причем тут #10
2. Что есть гиморой?
 Геморрой - не советую его испытывать никому!


 
Германн ©   (2004-10-15 03:11) [15]

2 Zahar   (15.10.04 03:03) [13]
А где именно "выдается ошибка:
[Error]: Invalid typecast" ?


 
Defunct ©   (2004-10-15 03:23) [16]

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;


Примечание: код писал "на коленке" возможны ошибки, главное принцип.


 
Defunct ©   (2004-10-15 03:35) [17]

> 2. Что есть гиморой?

гиморой - (на научном языке) - способ, который очень сложно решает простую задачу.

гиморой - (на базарном языке) - делать что-либо через ж..


 
Германн ©   (2004-10-15 03:52) [18]

2 Defunct ©   (15.10.04 03:35) [17]
Давай все же не будем изобретать новые сущности!

Имхо:
гемор(геморрой) - (на научном языке) - способ, который очень сложно решает простую задачу.

гемор(геморрой) - (на базарном языке) - делать что-либо через ж..


 
Defunct ©   (2004-10-15 03:54) [19]

> Давай все же не будем изобретать новые сущности!

Почему бы и нет?

гемор(геморрой) - (на научном языке) - способ, который очень сложно решает простую задачу.
гемор(геморрой) - (на базарном языке) - делать что-либо через ж..
(С) def


 
Defunct ©   (2004-10-15 03:57) [20]

[19]
опс, пардон, случайно скопировал фразы мне не принадлежащие..

должно быть так:


> Давай все же не будем изобретать новые сущности!

Почему бы и нет?

гиморой - (на научном языке) - способ, который очень сложно решает простую задачу.
гиморой - (на базарном языке) - делать что-либо через ж..
(C) def


 
Defunct ©   (2004-10-15 03:59) [21]

гимор/гиморой звучит более убедительно и главное никак не связоно с медицинским термином. ;)


 
Германн ©   (2004-10-15 04:08) [22]

2 Defunct ©   (15.10.04 03:57) [20]
> Почему бы и нет?
Ну, во первых, тебя  могут не понять.

Во-вторых, поиск по Яндексу, Gooogl"у и т.д. и т.п. может либо не привести ни к чему, либо привести к тем, которые тебе не нужны (врядли нужны)!


 
jack128 ©   (2004-10-15 04:18) [23]

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;


 
jack128 ©   (2004-10-15 04:19) [24]

jack128 ©   (15.10.04 4:18) [23]

4 утра..На орфографию прошу не смотреть.. Спок ночи.



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

Текущий архив: 2004.10.31;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.043 c
14-1096896970
ArchValentin
2004-10-04 17:36
2004.10.31
Программа управления комп. салоном...


9-1088322595
Bizon's
2004-06-27 11:49
2004.10.31
Проекция точки


14-1097317987
Kerk
2004-10-09 14:33
2004.10.31
Аптека


14-1097420124
Knight
2004-10-10 18:55
2004.10.31
Кто в курсе... Почему на delphigfx.mastak.ru


14-1097253935
Leaner
2004-10-08 20:45
2004.10.31
Количество секторов в кластере