Форум: "Основная";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];
ВнизКак текст из 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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.038 c