![]() |
zeichen aus einem String löschen
Moin moin nochmal,
ich weiss, ich weiss es gibt jede Menge Beispiele, aber leider ahb ich so meine liebe Not mit diesen Dingern. Also, zu meinem Delphi Problem: Ich habe einen String, der einzelne Werte enthält. Jeder Wert ist durch ein Semikolon von dem anderen getrennt. Jeder einzelen Wert beginnt und endet mit einem " (Anführungszeichen). Nun gibt es aber einige Werte, die haben noch zwei zusätzliche " (Anführungszeichen) und die müssen weg. Beipsielzeile: "Text1";"Text2";"Test-"Text3"";"Test4";"Test5-"Hallo"";"1212334"; rauskommen soll: "Text1";"Text2";"Test-Text3";"Test4";"Test5-Hallo";"1212334"; Wie kann ich sowas am besten Anfangen ?? :?: Ich habe versucht die Werte einzeln zu lesen und dann zu bearbeiten, falle aber dann schon gedanklich auf die Nase... :wall: :wall: :wall: :wall: Kann mir jemand - auf die schnelle - Helfen ??? Besten Dank ascotlx |
Re: zeichen aus einem String löschen
Hi,
kannst du diese nicht einfach beispielsweise mit ![]()
Delphi-Quellcode:
var = StringReplace(var, '""', '"', [rfReplaceAll]);
|
Re: zeichen aus einem String löschen
Moin Matze,
damit bleibt immer noch folgendes über : "Text1";"Text2";"Test-"Text3";"Test4";"Test5-"Hallo";"1212334"; anstatt: "Text1";"Text2";"Test-Text3";"Test4";"Test5-Hallo";"1212334"; ich habe leider keinen Anhalt über ein wiederkehrendes Muster .... cu ascotlx |
Re: zeichen aus einem String löschen
Achso, das habe ich ganz übersehen. Ich denke, du wirst um's manuelle Parsen nicht herumkommen. Den Text zwischen ";" betrachten (Anfang und Ende einzeln behandeln) und auf Anführungszeicen prüfen.
|
Re: zeichen aus einem String löschen
Du könntest den String in einzelne SubStrings auteilen, anhand der ; und dann alle " löschen und nur die am Anfang und Ende lassen, dann wieder zu einem String machen.
z.B.: "Text1";"Text2";"Test-"Text3"";"Test4";"Test5-"Hallo"";"1212334"; String1 = "Text1"; String2 = "Text2"; String3 = "Test-"Text3""; String4 = "Test4"; String5 = "Test5-"Hallo""; String6 = "1212334"; bearbeitet: String1 = "Text1"; String2 = "Text2"; String3 = "Test-Text3"; String4 = "Test4"; String5 = "Test5-Hallo"; String6 = "1212334"; zusammengefügt: "Text1";"Text2";"Test-Text3";"Test4";"Test5-Hallo";"1212334"; Aber was mir gerade auffällt. Wie entsteht denn eigentlich der String? Es sieht so aus, als könntest du es schon machen, bevor du diesen String erzeugst. Es wäre schön, wenn du mal genau sagen würdest, was du vor hast. Das könnte einigen weiterhelfen! __________ EDIT: Jetz war wieder einer schneller :x |
Re: zeichen aus einem String löschen
Moin moin,
ich habe mir aus Euren Antworten folgendes zusammengestrickt.... :coder: hat jemand eine Optimierungsidee ??? das sieht so halb fertig aus.
Delphi-Quellcode:
Der Aufruf:
// doppelte Anführungszeichen bearbeiten
function repl1(zeile:string):string; var ps1, ps2 : integer; s, s1, str1, str2 : string; begin s:=';'; s1:='"'; while Pos(s,zeile) > 0 do begin ps1:=(Pos(s,zeile)); str1:=copy(zeile,1,Pos(s,zeile)-1); delete(zeile,1,length(str1)+1); while pos(s1,str1) > 0 do begin if Pos(s1,str1) > 0 then delete(str1,pos(s1,str1),length(s1)); end; str2:=str2+'";"'+str1; end; delete(str2,Pos(s1,str2),length(s1)+1); result:=str2; end;
Delphi-Quellcode:
danke schon mal für die Tipps.
// Bsp.Inahlt von zeile (gelesen aus Textdatei):
// "Text1";"Text2";"Test-"Text3"";"Test4";"Test5-"Hallo"";"1212334"; zeile:=repl1(zeile); ascotlx |
Re: zeichen aus einem String löschen
result := str2 + '";';
Dann passt das. |
Re: zeichen aus einem String löschen
Hier noch ein Vorschlag:
Delphi-Quellcode:
Gruß Hawkeye
procedure CleanString (var s: string);
var i, d : Integer; begin d := 0; for i := 1 to Length(s) do begin s[i - d] := s[i]; if (i > 1) and (i < Length(s)) then if (s[i] = '"') and (s[i - 1] <> ';') and (s[i + 1] <> ';') then Inc (d); end; SetLength (s, Length(s) - d); end; |
Re: zeichen aus einem String löschen
Hier etwas sehr Billiges:
Delphi-Quellcode:
Und hier etwas Schnelles:
Function QuickAndDirtyZapQuotesInStrings (Const aString : String) : String;
Begin Result := StrReplace (aString,'";"', #255, [rfReplaceAll]); // Die ";" in ein Spezialzeichen übersetzen Result := StrReplace (Result ,'"', '', [rfReplaceAll]); // Nun die verbleibenden " löschen Result := StrReplace (Result ,#255, '";"', [rfReplaceAll]); // Und das Spezialzeichen wieder in ";" zurückverwandeln End;
Delphi-Quellcode:
Ich hab o.g. Funktion nur gegen dein Beispiel getestet.
Function ZapQuotes(const aString: string): string;
var i, j, n: Integer; // Laufvariablen: i in aString, j in Result. n = Länge von aString InStr: Boolean; // True-> Innerhalb eines '"'<Strings>'"', False = nicht. begin n := Length (aString); SetLength (Result, n); inStr := False; j := 0; for i := 1 to n do begin if aString[i] = '"' then // Quote gefunden if not InStr then // Sind wir innerhalb eines Strings? InStr := True // Nein, dann sind wir es jetzt else if (i < n) and (aString[i + 1] <> ';') then Continue // Wenn das nächste Zeichen kein ';' ist, dieses Zeichen else // *nicht* kopieren InStr := False; // Ansonsten sind wir nicht mehr in einem String Inc(j); Result[j] := aString[i]; // Kopiert aktuelles Zeichen end; SetLength (Result, j); // Länge des Ergebnisses setzen end; |
Re: zeichen aus einem String löschen
Warum so kompliziert wenns auch einfach geht :lol:
![]() -- ![]() Mfg |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:16 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 by Thomas Breitkreuz