Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Text zerlegen (https://www.delphipraxis.net/33162-text-zerlegen.html)

icke 2. Nov 2004 13:57


Text zerlegen
 
Hallo

Ich schreib grad folgendes Delphi Programm (Delphi 3):

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    MEMO1: TMemo;
    Button1: TButton;
    Memo2: TMemo;
    Memo3: TMemo;
    Memo4: TMemo;
    Memo5: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  t1: integer ;
implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
T1:= strToInt(Memo1.Text);

end;

end.
Das ausschmücken mach ich später noch

Ich habe ein großes memo. In dieses soll ein Text eingefügt werden (Strg + V)
Wenn man auf den Button klickt, dann soll der Text in die andere Memos Felder zerlegt werden und zwar mit jeweils 510 Zeichen!

Bitte um Hilfe :wall:

Dax 2. Nov 2004 13:58

Re: Text zerlegen
 
Ich schätze, t1 soll die Länge des Textes in Memo1 enthalten. Dann wäre der Code aber so:
Delphi-Quellcode:
t1 := Length(Memo1.Text)

glkgereon 2. Nov 2004 14:00

Re: Text zerlegen
 
das würd ich so machen:

Delphi-Quellcode:
for i:=1 to length(Memo.Lines.Text) div 510 do//wieviele memos werden gebrauch?
  begin
  TMemo(findcomponent('Memo'+inttostr(i))):=copy(Memo.Lines.Text,0,510);//text übertragen
  delete(memo1.Lines.Text,0,510);//text aus 1. memo löschen
  end;
TMemo(findcomponent('Memo'+inttostr(i+1))):=Memo.Lines.Text;//rest des textes löschen
können noch fehler drinsein, aber sollte vom prinzip her klappen...

icke 2. Nov 2004 14:06

Re: Text zerlegen
 
sorry, ich check das ganze noch nicht so...

kannst du mir bitte den genauen Quelltext geben?

glkgereon 2. Nov 2004 14:20

Re: Text zerlegen
 
also, nochma besser kommentiert und übersichtlicher

Delphi-Quellcode:
for i:=1 to length(Memo.Lines.Text) div 510 do
  begin
da du in jede memo 510 zeichen haben willst, ermittel ich, wie viele memos ich brauch und durchlaufe so oft

Delphi-Quellcode:
TMemo(findcomponent('Memo'+inttostr(i)))
ermittelt die memo mit dem namen "Memo"+ die laufende nummer i
also die memo wo jetzt reingeschrieben werden soll

Delphi-Quellcode:
copy(Memo.Lines.Text,0,510);
kopiert die ersten 510 zeichen aus der ausgangsmemo

Delphi-Quellcode:
TMemo(findcomponent('Memo'+inttostr(i))).Lines.Text:=copy(Memo.Lines.Text,0,510);
das kopiert also die ersten 510 zeichen der ausgangsmemo in die memo mit der laufenden nummer i

Delphi-Quellcode:
delete(memo1.Lines.Text,0,510);
end;
hier lösche ich den bereits kopierten text (510 zeichen) aus der ausgangsmemo
ende der schleife

Delphi-Quellcode:
TMemo(findcomponent('Memo'+inttostr(i+1))).Lines.Text:=Memo.Lines.Text;
Memo.Clear;
nun wird der komplette rest (also rest -> zeichenanzahl mod 510) in die nächte memo kopiert
danach wird als letztes die ausgangsmemo geleert

(der code ist leicht anders als der vorige, da mir da tippfehler unterlaufen sind :wink: )

pjuk 2. Nov 2004 14:25

Re: Text zerlegen
 
hi,

für was braucht man so nen programm?!

würd mich mal intressieren ^^

icke 2. Nov 2004 14:29

Re: Text zerlegen
 
also, ich habs mal versuch...

bei der Zeile mit dem Copy gibt er folgenden Fehler aus:
Operator oder Semikolon fehlt

icke 2. Nov 2004 14:31

Re: Text zerlegen
 
@pjuk

Für Hardware, die nur soviel aufnehmen kann ;-)

pjuk 2. Nov 2004 14:32

Re: Text zerlegen
 
scheint primitiv zu sein xD.
dacht gleich an sms aufgrund der anzahl von zeichen... deswegen hab ich gefragt :)

Nicodius 2. Nov 2004 14:35

Re: Text zerlegen
 
fürs testen vielleicht??


ich würds einfacher machen und zwar die einzelnen chars rüberkopieren

Delphi-Quellcode:
for i := 1 to 510 do
  Memo2.text[i] := Memo1.text[i];

:stupid:

glkgereon 2. Nov 2004 14:36

Re: Text zerlegen
 
Zitat:

bei der Zeile mit dem Copy gibt er folgenden Fehler aus:
Operator oder Semikolon fehlt
hast du den code so anbgeschrieben? :roll:

also, diese beiden befehle:

TMemo(findcomponent('Memo'+inttostr(i)))
copy(Memo.Lines.Text,0,510)

habbich erstmal einzeln erklärt....
und dann die kombination....

also, hier nochma der code:

Delphi-Quellcode:
for i:=1 to length(Memo.Lines.Text) div 510 do
  begin   
  TMemo(findcomponent('Memo'+inttostr(i))).Lines.Text:=copy(Memo.Lines.Text,0,510);   
  delete(memo1.Lines.Text,0,510);
  end;   
TMemo(findcomponent('Memo'+inttostr(i+1))).Lines.Text:=Memo.Lines.Text;
Memo.Clear;
deine ausgangsmemo heisst Memo und die anderen memo1, memo2, ..., memon

mirage228 2. Nov 2004 14:37

Re: Text zerlegen
 
Hi Nicodius,

Dein Vorschlag ist zwar korrekt, aber nicht sehr effektiv, da bei jedem Zuweis an Text das Memo imho neu gezeichnet wird.

So ähnlich wäre es imho besser:
Delphi-Quellcode:
  Memo2.Text := Copy(Memo1.Text, 1, 510);
mfG
mirage228

icke 2. Nov 2004 14:43

Re: Text zerlegen
 
jetzt sagt er:
bei der delete zeile:

Konstantenobjekt kann nicht als VAR-Parameter weitergegeben werden

zum richtig abschreiben:
Ich kopier sie aus dem Forum raus ;-)

pjuk 2. Nov 2004 14:45

Re: Text zerlegen
 
naja die komponenten musst du schon so ändern dass sie zu deinem source passen.
solltest nicht vergesses alles zu hinterlegen.

icke 2. Nov 2004 14:46

Re: Text zerlegen
 
und wie?
das ganze sieht bis jetzt so aus
Code:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Memo: TMemo;
    Memo1: TMemo;
    Memo2: TMemo;
    Memo3: TMemo;
    Memo4: TMemo;
    Memo5: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  t1, i: integer;
implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
for i:=1 to length(Memo.Lines.Text) div 510 do
  begin
  TMemo(findcomponent('Memo'+inttostr(i))).Lines.Text:=copy(Memo.Lines.Text,0,510);
  delete(memo.Lines.Text,0,510);
  end;
TMemo(findcomponent('Memo'+inttostr(i+1))).Lines.Text:=Memo.Lines.Text;
Memo.Clear;
end;

end.

pjuk 2. Nov 2004 14:47

Re: Text zerlegen
 
in bezug auf was?
den code anpassen oder was meinst du?

mirage228 2. Nov 2004 14:48

Re: Text zerlegen
 
Zitat:

Zitat von icke
jetzt sagt er:
bei der delete zeile:

Konstantenobjekt kann nicht als VAR-Parameter weitergegeben werden

zum richtig abschreiben:
Ich kopier sie aus dem Forum raus ;-)

Das:
Delphi-Quellcode:
delete(memo1.Lines.Text,0,510);
kann auch nicht funktionieren, da Delphi-Referenz durchsuchenproperties (In dem Fall die property Text von Memo1.Lines) nicht als Referenzparameter (VAR oder OUT Parameter) verwendet werden können. Du musst so dann mit einer Zwischenvariable arbeiten.

So z.B.:
Delphi-Quellcode:
var
  s: string;
begin
  s := memo1.lines.text;
  delete(s, 0, 510);
  memo1.lines.text := s;
end;
mfG
mirage228

Edit: BB-Code Fehler verbessert - zum X-ten mal :mrgreen:

Nicodius 2. Nov 2004 14:51

Re: Text zerlegen
 
Delphi-Quellcode:
TMemo(findcomponent('Memo'+inttostr([b]i[/b]+1))).Lines.Text:=Memo.Lines.Text;

wie das funktioniert versteh ich nicht entweder ist i nil oder i ist nach der schleife 540 ... andere möglichkeiten gibt es nicht ..
das kann also nicht funktionieren

icke 2. Nov 2004 14:51

Re: Text zerlegen
 
sorry, aber ich bin halt noch ´n newbie

Ich checks immer noch nicht.
kann mir niemand den kompletten Quelltext schreiben?

mirage228 2. Nov 2004 14:55

Re: Text zerlegen
 
Zitat:

Zitat von Nicodius
Delphi-Quellcode:
TMemo(findcomponent('Memo'+inttostr([b]i[/b]+1))).Lines.Text:=Memo.Lines.Text;

wie das funktioniert versteh ich nicht entweder ist i nil, 0, 1 oder i ist nach der schleife 540 ... andere möglichkeiten gibt es nicht ..
das kann also nicht funktionieren

Oh, stimmt. Das Benutzen der Schleifenvariable nach der Schleife könnte glaube ich interessant werden :mrgreen:

mfG
mirage228

Nicodius 2. Nov 2004 14:58

Re: Text zerlegen
 
:mrgreen: ich würds mit dem copy machen :thumb:

glkgereon 2. Nov 2004 15:04

Re: Text zerlegen
 
wieso???

wieso sollte i 540 sein???

also ich mein es ginge...zur sicherheit machs halt als while schleife...also so:

Delphi-Quellcode:
i:=0;
while i<length(Memo.Lines.Text) div 510 do
  begin
  inc(i);
  TMemo(findcomponent('Memo'+inttostr(i))).Clear;
  TMemo(findcomponent('Memo'+inttostr(i))).Lines.Text:=copy(Memo.Lines.Text,0,510);
  s:=Memo.Lines.Text;
  delete(s,0,510);
  Memo.Lines.Text:=s;
  end;
TMemo(findcomponent('Memo'+inttostr(i+1))).Lines.Text:=Memo.Lines.Text;
Memo.Clear;
also bei mir funzt das...

es kann noch zu nem error kommen wenn halt zuwenig memos da sind...aber das kannst du machen...

Nicodius 2. Nov 2004 15:15

Re: Text zerlegen
 
weil nach der schleife i anders ist ;)

glkgereon 2. Nov 2004 15:34

Re: Text zerlegen
 
und wieso gerade 540?

ich mein das hat doch keinen sinn, oder?

Nicodius 2. Nov 2004 15:35

Re: Text zerlegen
 
sorry meinte 510

glkgereon 2. Nov 2004 15:59

Re: Text zerlegen
 
nein, wenn überhaupt hätte i in dem fall den wert length(Memo.Lines.Text) div 510 gehabt...darauf habbich gehofft


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:42 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz