Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.51 MB
Время: 0.039 c
3-1096739539
Сергей Бастрыгин
2004-10-02 21:52
2004.10.31
Сменить тип поля вместо CHAR на VARCHAR


1-1097843033
Саша
2004-10-15 16:23
2004.10.31
Разрыв слитной строки в DrawText


3-1096537176
Pilot
2004-09-30 13:39
2004.10.31
Разработка сетевого ПО в Delphi


3-1096476993
сергей1
2004-09-29 20:56
2004.10.31
хранимые процедуры в access


14-1097224980
Darts
2004-10-08 12:43
2004.10.31
Библиотека для получения (отправки почты)





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