![]() |
String an bestimmtem Zeichen Splitten
Hi
ich möchte einen String an einer bestimmten Stelle (bestimmtes Symbol) splitten der string säh in etwa so aus:
Delphi-Quellcode:
Das Sring muss nur in 2 teile gesplittet werden.
text,split1,split2: string;
text:='Das hier ist=ein Beispieltext^^'; //das "=" ist hier das Trennsymbol //sodass ich dann am Ende den String wie folgt vorliegen habe: split1='Das hier ist' split2='ein Beispieltext^^' könnt ihr mir helfen? Ich dachte an Trennzeichen suchen und dann mit copy, aber ich bin mir nicht sicher |
Re: String an bestimmtem Zeichen Splitten
Ganz recht, mit Pos() und Copy() kannst Du das machen.
|
Re: String an bestimmtem Zeichen Splitten
Da bist du schon auf dem richtigen Wege :)
Guck dir das hier mal an und du wirst noch einiges mehr können, als einen String zu splitten ;) ![]() grüße |
Re: String an bestimmtem Zeichen Splitten
Delphi-Quellcode:
function SplitStr(const S: string; Delim: Char; out S1, S2: string): Boolean;
{Splits the string S at the first occurence of delimiter character Delim and sets S1 to the sub-string before Delim and S2 to substring following Delim. If Delim is found in string True is returned, while if Delim is not in string False is returned, S1 is set to S and S2 is set to ''.} var DelimPos: Integer; // position of delimiter in source string begin // Find position of first occurence of delimter in string DelimPos := SysUtils.AnsiPos(Delim, S); if DelimPos > 0 then begin // Delimiter found: do split and return True S1 := Copy(S, 1, DelimPos - 1); S2 := Copy(S, DelimPos + 1, MaxInt); Result := True; end else begin // Delimeter not found: return false and set S1 to whole string S1 := S; S2 := ''; Result := False; end; end; |
Re: String an bestimmtem Zeichen Splitten
Warum werden eigentlich immer gleich die Lösungscodes gepostet. Da lernt man als Themenersteller doch garnichts dabei...
|
Re: String an bestimmtem Zeichen Splitten
Vielen Dank erstmal ;)
@ LuCSteR: Doch ich lerne, weil ich versuche es zu verstehen.. btw: bei Hathor ist der Delim ein Char, was bedeutet das, ich wusste es mal... irgendwas mit einem zeichen aber wie genau?..:oops: |
Re: String an bestimmtem Zeichen Splitten
Hi,
Delim von Delimiter --> das Trennzeichen. Mfg FAlter |
Re: String an bestimmtem Zeichen Splitten
Richtig, ein Char ist ein einzelnes Zeichen, im Gegensatz zu z.B. einem String.
|
Re: String an bestimmtem Zeichen Splitten
Zitat:
Delphi-Quellcode:
und btw: wie mache ich in einer showmessage eine neue Zeile? Da gabs irgendso ein Zeichen...
var x: char;
begin x:=h; end; //so? in einem normalen string geht das ja so in etwa:
Delphi-Quellcode:
auch in einer showmessage? (wegen der klammer halt)
string:='Zeile1'+
'zeile2'; ich würde es gerne in eine Prog-Zeile schreiben |
Re: String an bestimmtem Zeichen Splitten
Nein, auch ein Char musst Du in Hochkommata setzen. Und für eine neue Zeile setze einfach ein #13#10 dazwischen.
|
Re: String an bestimmtem Zeichen Splitten
Hi,
nein, ein Char (von Character) wird wie ein String mit genau einem Zeichen geschrieben. Der Compiler bestimmt aus dem Kontext, ob es ein String oder ein Char ist. Also 'h' und nicht nur h. (Es gibt aber auch Sprachen, bei denen unterschieden wird, da ist dann z. B. "h" ein String und 'h' ein Char, aber bei pascalartigen Sptrachen ist es in beiden Fällen 'h'.) Für eine neue Zeile reicht #13 aus, obwohl unter Windows eigentlich #13#10 korrekt ist.
Delphi-Quellcode:
Mfg
'Zeile1'#13'Zeile2'
FAlter |
Re: String an bestimmtem Zeichen Splitten
vielen Dank, ihr seid klasse^^
eine Frage noch.. ich habe ein normales Label und möchte es mit einem String füllen.. geht nicht also nicht mit der Funktion von oben
Delphi-Quellcode:
..
RandomZeile: integer;
Loesung: string; {Vorgabe} SplitStr(const S: string; Delim: Char; out S1, S2: string) {von mir ausgefüllt} Splitstr(Richedit1.Lines[RandomZeile],'=',label1.Caption ,Loesung) |
Re: String an bestimmtem Zeichen Splitten
Nimm noch eine lokale Stringvariable, übergib diese an die Funktion und weise sie anschließend dem Label zu.
|
Re: String an bestimmtem Zeichen Splitten
k dachte es geht auch so..
|
Re: String an bestimmtem Zeichen Splitten
An deiner Stelle würde ich mir trotzdem das Tutorial mal anschauen. Dann kannst du mit Strings alles machen was du willst, wenn du alles durchgegangen bist. Bei dem Lösungscodepost z.b. weist du wieder nicht was ein Delimiter ist oder was die einzelnen Paramter bedeuten. klar man kanns bei dem einfachen bsp deuten aber bei anderen fuktionen ist es schon schwieriger zu wissen, wofür ein einzelner paramter steht...
Naja hauptsache du hast jetzt deine Lösung und sie auch verstanden ;) |
Re: String an bestimmtem Zeichen Splitten
Hi,
Zitat:
Delphi-Quellcode:
Da es gerade in nem anderen Thread darum geht... Ist bei Delphi und Lazarus (bzw. VCL und LCL) gleich.
var
RandomZeile: integer; Loesungm Key: string; Key := RichEdit1.Lines.Names[RandomZeile]; Label1.Caption := Key; Loesung := RichEdit1.Lines.Values[Key]; Mfg FAlter |
Re: String an bestimmtem Zeichen Splitten
Ja habe ich..^^
nur die Funktion klappt trotzdem nicht und da wären wir wieder bei deinem Punkt, denn wenn ich sie selber gemacht hätte, wüsste ich woran es liegt: edit: vergesst es..^^ muss mich korrigieren... ich hatte einen schleifenfehler davor, die zeilen oben hat er einfach übersprungen, der code stimmt... SRY^^ |
DP-Maintenance
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
Delphi-Frage |
Re: String an bestimmtem Zeichen Splitten
Hi,
auch wenn es nicht an den bisherigen Code anschließt, darf es so etwas sein?
Delphi-Quellcode:
Gruß
function StringSplit(input : String; SeperatorChar : Char) : TStringList;
var SL : TStringList; S1, S2 : String; begin SL := TStringList.Create; s1 := input; while POS(SeperatorChar, S1) <> 0 do begin S2 := Copy(S1, 1, POS(SeperatorChar, S1) -1); SL.Add(S2); S1 := Copy(S1, POS(SeperatorChar, S1) +1, Length(S1)); end; SL.Add(S1); Result := SL; end; [Edit] Ich glaub das war kontraproduktiv :oops: [/Edit] |
Re: String an bestimmtem Zeichen Splitten
Zitat:
und was machst du bei einer Exception?
Delphi-Quellcode:
In deinem Fall wird dann die SL nicht freigegeben (aber natürlich auch nicht zurückgegeben).
function ReturnsAnObject: TObject;
begin Result := TObject.Create; try ... except Result.Free; // <-- WICHTIG! raise; end; end; Mfg FAlter |
Re: String an bestimmtem Zeichen Splitten
Wenn mit Stringliste, dann direkt
Delphi-Quellcode:
sl.Delimiter := <Trenner>;
sl.StrictDelimiter := True; sl.DelimitedString := <String>; |
Re: String an bestimmtem Zeichen Splitten
Hi,
verstehe nicht ganz :gruebel: @FAlter Was bzw. wie meinst du das? Übergeben wird ein String und nur der wird aufgeteilt, von Objekten war keine Rede. @mkinzler Das kann die TStringList von Hause aus? Da kann man mal sehen wie oberflächlich man sich mit den Komponenten beschäftigt :oops: Gruß |
Re: String an bestimmtem Zeichen Splitten
Zitat:
|
Re: String an bestimmtem Zeichen Splitten
Hi,
aber du erstellst doch ein TStringList-Objekt, welches im Falle einer Exception nicht freigegeben wird. Nehmen wir einmal an, dein String belegt ca. 1 GiB und du willst ihn auf deine StringList aufteilen, welche dann immer mehr Ram belegt und irgendwann sind dann meine 1,5 GiB voll, obwohl der String nicht komplett abgearbeitet ist. Nun belegt die StringList gie ganze Zeir meinen RAM und ich wunder mich, warum das System so langsam ist und so viel Swappen muss und ich ständig Meldungen von wegen "nicht genügens Speicher" bekomme. Mfg FAlter |
Re: String an bestimmtem Zeichen Splitten
Hi
@FAlter :idea: Danke und Gruß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:19 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