![]() |
Strings trennen
Hallo,
ich habe folgende Zeichenfolge in einem Memo stehen: 0141-1234561 -9239872 usw. ca 8000 verschiedene Zeilen Wie kann ich den Mittelteil herauslöschen das es so aussieht. 0141-9239872 gruss vom capo |
Re: Strings trennen
Da kannst Du mit copy/delete und pos arbeiten.
Die Hilfe und viele Beispiele im Forum sollten Dir da weiterhelfen. Grüße Klaus |
Re: Strings trennen
Hallo Klaus,
danke für deine Antwort, hab auch das hier gefunden: ![]() kann ich das auch dafür nehmen? gruss capo |
Re: Strings trennen
hab das grad mal so in paar min hingekrizelt...
habs aber net getestet... vielleicht gehts ja so (oder so ähnlich)
Delphi-Quellcode:
procedure TMain_Form.Strindurchsuchen ();
var sRow, sRowNew : String; i, ilen, ipos : Integer; begin ilen := Length(sRow); For i := 1 To iLen Do Begin If sRow[i] = '-' Then Begin sRowNew := Copy(sRow, 1, (iLen - i) sRowNew := sRowNew + Copy(sRow, i, iLen); End; End; End; |
Re: Strings trennen
Hi
Ein Vorschlag, der vielleicht etwas ungeschickt aussieht, dafür dir aber für solche Fälle immer eine Lösung bildet.
Delphi-Quellcode:
der Aufruf erfolgt dann für deinen Zweck
Funktion TMyForm1.GetTextElement(ElementNr: Integer; MeinTrennzeichen, MeinText: String): String;
Var RefStr : String; Ausg : String; ende : Integer; i : Integer; begin Ausg:=''; For i:= 1 To ElementNr do begin Ende:=Pos(MeinTrennzeichen,meinText); if Ende>0 then begin if i=ElementNr then Ausg:=Copy(RefStr,1,Ende-1) else RefStr:=Copy(RefStr,Ende+1,Length(RefStr)-Ende); end else if i=ElementNr then Ausg:=RefStr; end; Result:=Ausg; end;
Delphi-Quellcode:
oder auch, so wirds vielleicht deutlich
NeuStringwert:=GetTextElement(1,'-',AltString)+'-'+GetTextElement(3,'-',AltString);
Delphi-Quellcode:
sollte ergeben '123-890'
NeuStringwert:=GetTextElement(1,'-','123-4567-890')+'-'+GetTextElement(3,'-','123-4567-890');
Viel Spass Gruß oldmax |
Re: Strings trennen
Um noch n Tutorial hinterher zu werfen:
![]() mfg Christian |
Re: Strings trennen
Hallo capo,
hat Deine Zeichenfolge immer diesen Aufbau? Dann könntest Du folgendes ausprobieren:
Delphi-Quellcode:
Funktioniert aber nur, denn die Zeichenfolge immer gleich lang und die Trennzeichen an der gleichen Position sind.
var
NewString : string; i : Integer; begin for i := 0 to Memo1.Lines.Count - 1 do begin NewString := LeftStr(Memo1.Lines[i],4) + RightStr(Memo1.Lines[i],7); Memo1.Lines[i] := NewString; end; end; Grüße Ines |
Re: Strings trennen
Danke an alle.
Hallo oldmax ich krieg immer nur ein - zu sehen, bestimmt mache ich was falsch. Hallo r2c2 danke für die Klasse-Seite muss ich mir alles noch genau ansehen. Hallo Ines Leider sind die unterschiedlich lang. Oder was meintest du mit immer gleichem Aufbau? Was ist LeftStr und RightStr wie muss ich die definieren? gruss capo |
Re: Strings trennen
Grüße,
ne du machst keinen Fehler, in der Funktion wurde lediglich eine Kleinigkeit vergessen. Hab ich mal schnell korrigiert:
Delphi-Quellcode:
EDIT: Man kann natürlcih auch auf RefStr komplett verzichten und dafür direkt auf MeinText zugreifen ;)
function TForm1.GetTextElement(ElementNo: Integer; Seperator,
Text: String): String; var elementEnd, i: Integer; begin for i := 1 to ElementNo do begin elementEnd := pos(Seperator, Text); if elementEnd > 0 then begin if i = ElementNo then Result := Copy(Text, 1, elementEnd - 1) else Text := Copy(Text, elementEnd + 1, Length(Text) - elementEnd); end else if i = ElementNo then Result := Text; end; end; EDIT2: Funktion klein gemacht und COde-formatierung vorgenommen ;) |
Re: Strings trennen
Hallo angos
wie muss ich das mit dem memo machen?
Delphi-Quellcode:
Irgendwie verstehe ich nicht wo ich dann die Zahlen angeben soll.
procedure TForm1.Button3Click(Sender: TObject);
var NeuStringwert, AltString: string; i: Integer; begin for i := 0 to Memo1.Lines.Count - 1 do NeuStringwert := GetTextElement(1, '-', '???') + '-' + GetTextElement(3, '-', '???'); Showmessage(NeuStringwert); end; gruss capo |
Re: Strings trennen
Hallo,
und wieder sind die Anforderungen nicht klar definiert - aber trotzdem:
Delphi-Quellcode:
Gute Nacht
function CapoStr(const s: String): String;
var iLen, iPos: Integer; begin iLen := Pos('-', s); iPos := PosEx('-', s, Succ(iLen)); Result := Copy(s, 1, iLen) + Copy(s, Succ(iPos), MaxInt); end; // Test procedure TDemoForm.MergeButtonClick(Sender: TObject); begin ShowMessage(CapoStr('0141-123456 -98765')); end; |
Re: Strings trennen
Hallo Marabu,
Zitat:
So hab ich es nun gemacht. Danke an alle nochmal.
Delphi-Quellcode:
function PosEx(const Substr: string; const S: string; Offset: Integer): Integer; begin if Offset <= 0 then Result := 0 else Result := Pos(Substr, Copy(S, Offset, Length(S))); if Result <> 0 then Result := Result + Offset - 1; end; function CapoStr(const s: string): string; var iLen, iPos: Integer; begin iLen := Pos('-', s); iPos := PosEx('-', s, Succ(iLen)); Result := Copy(s, 1, iLen) + Copy(s, Succ(iPos), MaxInt); end; procedure TForm1.Button2Click(Sender: TObject); var i: integer; begin for i := 0 to Memo1.Lines.Count - 1 do memo2.Lines.Add(CapoStr(Memo1.Lines[i])) end; |
Re: Strings trennen
Hallo capo,
hier nur noch eine Erklärung zu LeftStr + RightStr (gibt es in Delphi7): Die Funktion gibt einen Teilstring der angegebenen Länge zurück, der am Anfang des Strings beginnt. function LeftStr(const AText: AnsiString; const ACount: Integer): AnsiString; overload; Die Funktion gibt einen Teilstring mit einer bestimmten Länge zurück, der sich am Ende des angegebenen Strings befindet. function RightStr(const AText: AnsiString; const ACount: Integer): AnsiString; overload beide definiert in StrUtils Gruß Ines |
Re: Strings trennen
hi
Zitat:
Vergessen hab ich, den RefStr zuzuweisen.
Delphi-Quellcode:
Ok, passiert, wenn man den Code nicht prüft. Die Funktion aber ist etwas mehr als nur erster und letzter Textteil, es ist auch eine Möglichkeit, beliebig viele Textelemente mit Separatoren zusammen zu setzen und hinterher wieder zu zerlegen.
...
RefStr:=MeinText; Ausg:=''; ... Aber es gibt ja viele Wege nach Rom..... :zwinker: Gruß oldmax |
Re: Strings trennen
Danke Ines und oldmax :-D
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:25 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