![]() |
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 |
Re: zeichen aus einem String löschen
Zitat:
|
Re: zeichen aus einem String löschen
Zitat:
Gruß Hawkeye |
Re: zeichen aus einem String löschen
Wozu das Ganze hier? Der Vorschlag von Hawkeye219 ist doch gut.
Versteht gar nicht warum dann imma noch so ein Blödsinn gepostet werden muss. |
Re: zeichen aus einem String löschen
@Hawkeye: Ich ging davon aus, das er aus den Teilstrings die Quotes weglöscht.
Zitat:
Und was soll dieser niveaulose Ton? Ich z.B. empfinde meine Vorschläge nicht als 'Blödsinn', sondern (zumindest den Zweiten) als noch etwas eleganter als den von Hawkeye. Desweiteren sind sie (obwohl man es nicht sieht), quasi Zeitgleich gepostet worden. Und anstatt hier von Blödsinn zu faseln, solltest Du dich vielleicht auch mal am Wettstreit der elegantesten und/oder kürzesten und/oder schnellsten Varianten beteiligen. Bis zu einem Beweis deines Könnens bleibt dann dein Beitrag das, was Du Anderen unterstellst: Blödsinn. |
Re: zeichen aus einem String löschen
Ja stimmt schon. Kommt nich wieder vor, alcazar :P
_______ Ich meinte auch eigentlich das von database, aber egal jetz |
Re: zeichen aus einem String löschen
Moin moin ihr Coder dieser Welt,
ihr seid echt super ... vielen Dank für Eure Mühen und Ideen. Ich werde mich mal dran manchen Eure Antworten in Fleisch & Hirn übergehen zu lassen (ich geb' die Hoffnung ja nicht auf, diese Stringbearbeitung irgendwann zu kapieren :wall: (vielleicht geht das ja so in den alten Schädel)). cu && :thumb: ascotlx :EDIT: ich werde mich mal dran machen... nicht manchen...(meine Nerven) :roll: ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:14 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