![]() |
Delphi-Version: 6
posex oder pos, fester trenner im string
Hallo zusammen,
ich habe ein Problem und hoffe hier auf die Lösung, mit Delphi hatte ich bisher nichts am Hut, muss aber in einem Projekt eine Lösung für ein Problem finden. Ich habe einen string indem durch @@ die für mich interessanten Werte stecken, wie komme ich hier dran? Habe schon mit posex rum experementiert, gebe es aber auf.:pale: Vorgabe: L99522621@@99@@05652s8@@85zzs81@@r-77 1564@@20082014@@22082014@@@@@@ zwischen den doppelten affen liegen die Indizes, diese können unterschiedlich lang oder auch leer sein. Wie komme ich am besten an diese Werte?:?: Bin für jede Hilfe dankbar. mfg |
AW: posex oder pos, fester trenner im string
SplitString und Co.?
z.B. ![]() Man kann natürlich auch gern RegEx verwenden. |
AW: posex oder pos, fester trenner im string
Wirklich Delphi 6?
|
AW: posex oder pos, fester trenner im string
Zitat:
Ein kleiner Perversling der Neue? |
AW: posex oder pos, fester trenner im string
|
AW: posex oder pos, fester trenner im string
Delphi-Quellcode:
StringReplace ersetzt den doppelten Klammeraffen durch ein bel. Zeichen (hier '|'), was möglichst nicht in s vorkommen sollte. Suche dann in der DP mal nach "delimiter".
var
s: string; begin s := 'L99522621@@99@@05652s8@@85zzs81@@r-77 1564@@20082014@@22082014@@@@@@'; s := StringReplace(s, '@@', '|', [rfReplaceAll]); end; MfG |
AW: posex oder pos, fester trenner im string
Wozu erst ersetzen? Einfach direkt verwenden:
Delphi-Quellcode:
Und wenn es schnell gehen soll:
Function Split(Var S: String; Del: String): String;
Var p: Integer; Begin p := pos(Del, S); If p = 0 Then Begin Result := s; s := ''; End Else Begin Result := Copy(s, 1, p - 1); s := Copy(s, p + length(Del), length(s)); End; End; ... var s,teilString : string; begin s := 'L99522621@@99@@05652s8@@85zzs81@@r-77 1564@@20082014@@22082014@@@@@@'; while s<>'' do begin teilString := Split(s,'@@'); TuWasMitDem(teilString); end; end; ![]() Eine unicodefähige Variante ist weiter hinten zu finden. |
AW: posex oder pos, fester trenner im string
Zitat:
Bei neueren Delphi-Versionen kann man auch einfach eine TStringList nehmen und mit StrictDelimiter (gibt's auch noch nicht bei D7) und DelimitedText arbeiten. |
AW: posex oder pos, fester trenner im string
Ist mir auch grad aufgefallen..
|
AW: posex oder pos, fester trenner im string
@Dejan Vu:
Die vielen Klammeraffen am Stringende könnten dem TE beim PoSex vllt. Schwierigkeiten machen, daher der StringReplace-Vorschlag :-D MfG |
AW: posex oder pos, fester trenner im string
Dann steht zwischen den Delimitern nichts und die Routine liefern einen leeren String. Mit '|' wäre das genau so.
|
AW: posex oder pos, fester trenner im string
Zitat:
Delphi-Quellcode:
(blind in der Funktion und Anwendung) ist immer der Anfang von Problemen, die einen früher oder später einholen.
StringReplace
Warum schreibt man sich nicht eine Funktion, die das auch wirklich interpretieren kann? |
AW: posex oder pos, fester trenner im string
Vielen Dank an ALLE für die Hinweise, SplitString hat mir geholfen.
#Jens01 Perversling ist, wer an perverses denkt. :lol: Super Forum, hat mir bei einem laufenden Projekt in vielen Fragen geholfen. |
AW: posex oder pos, fester trenner im string
Bezüglich dem StringReplace-Vorschlag:
Einige Split-Funktionen können nur mit einzelnen Trennzeichen, aber nicht mit Trenn-Sequenzen umgehen, also nur ein und nicht mehrere Zeichen. Wenn man soeine Funktion verwendet, dann muß man entweder die "Trennzeichen" ersetzen, oder man löscht/ignoriert nach dem auftrennen jede zweite Zeile. Hier darf aber das "Trennzeichen" als "Einzelzeichen" nicht in den Strings vorkommen, denn wenn das so ist, dann muß es wirklich als Trenn-Sequenz behandelt werden. |
AW: posex oder pos, fester trenner im string
Man muss sich eben entscheiden, ob man Daten so interpretiert, wie die Vereinbarung/das Protokoll das vorsieht oder eben nur quasi so in etwa.
Wundern darf man sich dann aber auch nicht wenn das Ergebins auch so aussieht: Wie vereibart oder quasi so in etwa :) |
AW: posex oder pos, fester trenner im string
Wenn die Vereinbarung der doppelte Klammeraffe als Trennzeichen war: Warum nicht lokal in ein gängigeres Trennzeichen stringreplacen?
Ich benutze das StringReplace um eingehenden Kram notfalls CSV-kompatibel zu machen, um dann meine CSV-Funktionen (und ggfs. Excel oder LibreOfficeCalc zwecks Kontrolle) darauf loszulassen. Wie himitsu schon schrub: Bei mir muss das Trennzeichen ein Zeichen, keine Zeichenfolge sein. Jeder wie er kann oder muss. Manche sind halt "Profis", ich eher nicht. Bisher ist mir noch nichts um die Ohren geflogen, was "quasi so in etwa" war. Habe bisher wohl offensichtlich nur Anfängerglück gehabt :oops: =========================================== quasi = ungefähr etwa = ungefähr quasi so in etwa = ungefähr so in ungefähr =========================================== Das Problem des TE wurde gelöst, also bitte Ruhe im Karton :-D MfG |
AW: posex oder pos, fester trenner im string
Zitat:
Für mich ist die ideale Split-Funktion übrigens ![]() Aber irgendwie habe ich den Eindruck, das es derzeit im Forum keine richtigen Probleme mehr gibt, sonst würden wir uns hier nicht seitenlang über Split-Routinen unterhalten. Zitat:
Zitat:
Außerdem bin ich nich im Karton. :stupid: |
AW: posex oder pos, fester trenner im string
Zitat:
![]() |
AW: posex oder pos, fester trenner im string
Zitat:
Es gibt Split-Funktionen, die bekommen 2 Parameter rein. - den aufzuteilenden String - und einen String mit allen Trennzeichen Da wird dann in dem "Trennzeichenstring" jedes Zeichen als eigenständige Trennzeichen verwendet.
Delphi-Quellcode:
würde dann quasi einem
Split('a*b c', '* ')
Delphi-Quellcode:
entsprechen.
Split('a*b c', ['*', ' '])
Und jetzt rate mal, was man im Delphi verbaut hat. Aber wenn man genau hin sieht, dann fällt einem das "s", am Ende des Delimiters-Parameter auf. :stupid: |
AW: posex oder pos, fester trenner im string
Zitat:
Wie würden Deine Antworten denn für D7..XE7 ausfallen? Warum eigentlich sollte man jede Frage nicht eigentlich immer bis auf die Assemblerbefehle des 8086 mit dem Azwangsigergate hin reANALysiren? Was mich OT mehr interessieren würde: Nagelneue/sauteure WP8.1 Smartphones haben eine gewisse Rechenleistung. Wie lässt sich deren Rechenleistung mit einem herkömmlichen PC vergleichen? MfG |
AW: posex oder pos, fester trenner im string
[gelöscht] da geht's weiter
![]() |
AW: posex oder pos, fester trenner im string
Zitat:
|
AW: posex oder pos, fester trenner im string
Nö, war schon "richtig" ... siehe vorhergehende Seite :stupid:
|
AW: posex oder pos, fester trenner im string
Zitat:
Vielleicht bringt es ja auch den Einen oder Anderen dazu sein Delphi zu erneuern. (Die Hoffnung stirbt zuletzt.) |
AW: posex oder pos, fester trenner im string
Da gebe ich Uwe uneingeschränkt Recht. Ehrlich gesagt wusste ich auch nicht, dass man (bereits bei XE) den LineBreak einer TStringlist selbst festlegen kann. Ich finde diese Lösung sehr smart und komfortabel und werde sie bei Bedarf sicherlich einsetzen :thumb:
|
AW: posex oder pos, fester trenner im string
Äh. Ich auch. Also 'Uwe recht geben' und nicht wissen, das das neuerdings geht, und verwenden, wenn man es mal braucht und. zusätzlich noch: "Ach nee, sollte mal doch wieder schauen, was es in der VCL schon fertig gibt".
|
AW: posex oder pos, fester trenner im string
Ich habe eine komplette Seite entfernen müssen.
Seid so gut und bleibt beim Thema. :roll: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:33 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