Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Memo Problem Zeile verschieben (https://www.delphipraxis.net/131819-memo-problem-zeile-verschieben.html)

Landogar-Garuno 31. Mär 2009 22:50


Memo Problem Zeile verschieben
 
Hallo alle zusammen...

habe folgendes Problem...

mein memo oder RichEdit enthält folgende String

example:

"10:80B82B3659A572A7BABE17A7D9B47B8D"=hex:64,c1,6d ,56,51,da,2b,3d,38,66,ce,24,
22,0e,4f,d7
"10:EC320C0012330C0047330C006E330C00"=hex:65,73,73 ,49,64,00,ca,01,47,65,74,53,
79,73,74,65
"10:9A350C00D8350C0024360C0072360C00"=hex:67,40,44 ,55,3f,24,63,68,61,72,5f,74,
72,61,69,74
"10:F0485E4AE8BEBBDF7D356562B281A677"=hex:67,66,1e ,88,04,8d,b9,8b,dc,2f,57,f3,
e3,87,8f,64


Text muss formatiert werden zu....

"10:80B82B3659A572A7BABE17A7D9B47B8D"=hex:64,c1,6d ,56,51,da,2b,3d,38,66,ce,24,22,0e,4f,d7

"10:EC320C0012330C0047330C006E330C00"=hex:65,73,73 ,49,64,00,ca,01,47,65,74,53,79,73,74,65

"10:9A350C00D8350C0024360C0072360C00"=hex:67,40,44 ,55,3f,24,63,68,61,72,5f,74,72,61,69,74

"10:F0485E4AE8BEBBDF7D356562B281A677"=hex:67,66,1e ,88,04,8d,b9,8b,dc,2f,57,f3,e3,87,8f,64


wobei es sich um ca. 1000 line handelt...
und alle unterschiedlich...jedoch die selbe formatierung

also so...
"10:11111111111111111111111111111111"=hex:AA,AA,AA ,AA,AA,AA,AA,AA,AA,AA,AA,AA,
CC,CC,CC,CC
"10:22222222222222222222222222222222"=hex:BB,BB,BB ,BB,BB,BB,BB,BB,BB,BB,BB,BB
EE,EE,EE,EE

jemand von euch eine Idee? ein example wäre vom vorteil.. :P


mfg Landogar

taaktaak 31. Mär 2009 22:55

Re: Memo Problem Zeile verschieben
 
Ich sehe da eigentlich keinen rechten Unterschied
- willst du lediglich die harten Zeilenumbrüche entfernen und aus zwei Zeilen jeweils Eine machen?

himitsu 31. Mär 2009 23:04

Re: Memo Problem Zeile verschieben
 
sieht mir nach dem Inhalt 'ner Reg-File aus :gruebel: ...

wenn letztes Zeichen in Zeile ein Komma ist, dann nächste Zeile hinten dranhängen

Landogar-Garuno 31. Mär 2009 23:19

Re: Memo Problem Zeile verschieben
 
Hallo

ja es ist für eine reg file...

ja genau aus zwei zeile eine machen...habe jedoch kein ansatz...wie ich es umsetzen kann

@himitsu

wenn letztes Zeichen in Zeile ein Komma ist, dann nächste Zeile hinten dranhängen <--- genau

eventuell ein beispiel für mich?

jaenicke 1. Apr 2009 00:29

Re: Memo Problem Zeile verschieben
 
Wie wäre es so?
Delphi-Quellcode:
Memo1.Text := ReplaceString(Memo1.Text, ','#13#10, ',', [rfReplaceAll]);

Landogar-Garuno 1. Apr 2009 02:36

Re: Memo Problem Zeile verschieben
 
Hallo

Danke funzt super...
:P

Texas 1. Apr 2009 04:59

Re: Memo Problem Zeile verschieben
 
hey,
hatte das gleiche Problem und habe den code von jaenicke so übernommen und bekam gleich ne Fehlermeldung
Delphi-Quellcode:
Memo1.Text := ReplaceString(Memo1.Text, ','#13#10, ',', [rfReplaceAll]);
such such such
Delphi-Quellcode:
Memo1.Text := StringReplace(Memo1.Text, ','#13#10, ',', [rfReplaceAll]);
danke hast mir auch geholfen
gruß Texas
PS was mir hier alles so findet um 6.00 :dancer2:

himitsu 1. Apr 2009 07:38

Re: Memo Problem Zeile verschieben
 
wenn es um viele Zeilen ginge und man nicht den Weg über .Text gehn wöllte ...
nja und wenn man mal genau das macht, was man sich dachte machen zu wollen ...
Delphi-Quellcode:
var i: integer;
begin
  Memo1.Lines.BeginUpdate;
  for i := Memo1.Lines.Count - 1 downto 1 do begin
    if Pos(',', Memo1.Lines[i - 1]) = Length(Memo1.Lines[i - 1]) then begin
      Memo1.Lines[i - 1] := Copy(Memo1.Lines[i - 1], 1, Length(Memo1.Lines[i - 1]) - 1)
        + Memo1.Lines[i];
      Memo1.Lines.Delete(i);
    end;
  end;
  Memo1.Lines.EndUpdate;
end;
bzw.
Delphi-Quellcode:
var i: integer;
  S: String;
begin
  Memo1.Lines.BeginUpdate;
  for i := Memo1.Lines.Count - 1 downto 1 do begin
    S := Trim(Memo1.Lines[i - 1]);
    if Pos(',', S) = Length(S) then begin
      Memo1.Lines[i - 1] := Copy(S, 1, Length(S) - 1) + Memo1.Lines[i];
      Memo1.Lines.Delete(i);
    end;
  end;
  Memo1.Lines.EndUpdate;
end;

jaenicke 1. Apr 2009 18:21

Re: Memo Problem Zeile verschieben
 
Das ist schlecht, glaube ich, weil soweit ich mich erinnere die Lines-Eigenschaft von Memos extrem langsam ist. Das habe ich im DF beim Adventsgewinnspiel gemerkt im Vergleich zu einer normalen TStringList. Trotz BeginUpdate...EndUpdate.

DeddyH 1. Apr 2009 18:23

Re: Memo Problem Zeile verschieben
 
StringReplace ist aber auch nicht gerade für Geschwindigkeit bekannt.

himitsu 1. Apr 2009 19:14

Re: Memo Problem Zeile verschieben
 
es kommt dauf an ... bei TStrings/TStringList ist Text langsamer, da es den Gesamt-String erstmal aus den Einzel-Strings zusammensetzt und bei setzen zerlegt, wärend .Value direkt auf die Einzel-Strings zugreift.

TStrings in Verbindung mit TMemo ist wirklich langsamer, da es dort nur eine Umleitung zum "Memo" ist und im "Memo" der Inhalt als Gesamt-String gespeichert ist.


Es ging aber mehr um das Prinzip ... also das man
anhand seiner "Aufgabenstellung" auch zum Ziel kommt, indem man es "direkt" in Code umsetzt. :angel:

xZise 1. Apr 2009 22:30

Re: Memo Problem Zeile verschieben
 
Hallo,

ist es nicht sogar günstiger auf das Pos zu verzichten? Da man ja weiß wo es sein muss, kann man doch einfach gucken ob DA ein Zeichen ist?
Also statt
Delphi-Quellcode:
if Pos(',', Memo1.Lines[i - 1]) = Length(Memo1.Lines[i - 1]) then
einfach
Delphi-Quellcode:
if Memo1.Lines[i - 1][Length(Memo1.Lines[i - 1])] = ',' then
nehmen?

Und wenn .Text beim Memo schneller ist, könnte es dann nicht schneller sein, einfach eine zweite StringList zu nehmen und die mit dem Text aus dem Memo zu füttern? Wollte ich nur so gesagt haben :)

MfG
xZise

himitsu 2. Apr 2009 07:02

Re: Memo Problem Zeile verschieben
 
da aber mindestens
Delphi-Quellcode:
if (Memo1.Lines[i - 1] <> '') and (Memo1.Lines[i - 1][Length(Memo1.Lines[i - 1])] = ',') then
denn was passiert, wenn die Zeile lehr ist?
genau es kommt eine Exception :angel2:

Delphi-Quellcode:
var i: integer;
  S: String;
begin
  Memo1.Lines.BeginUpdate;
  for i := Memo1.Lines.Count - 1 downto 1 do begin
    S := Trim(Memo1.Lines[i - 1]); // eventuell auch einfach nur TrimRight
    if (S <> '') and (S[Length(S)] = ',') then begin
      Memo1.Lines[i - 1] := Copy(S, 1, Length(S) - 1) + Memo1.Lines[i];
      Memo1.Lines.Delete(i);
    end;
  end;
  Memo1.Lines.EndUpdate;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:13 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