Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi zeichen aus einem String löschen (https://www.delphipraxis.net/77842-zeichen-aus-einem-string-loeschen.html)

ascotlx 25. Sep 2006 17:02


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

Matze 25. Sep 2006 17:08

Re: zeichen aus einem String löschen
 
Hi,

kannst du diese nicht einfach beispielsweise mit Delphi-Referenz durchsuchenStringReplace ersetzen?

Delphi-Quellcode:
var = StringReplace(var, '""', '"', [rfReplaceAll]);

ascotlx 25. Sep 2006 17:19

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

Matze 25. Sep 2006 17:24

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.

MuTzE 25. Sep 2006 17:29

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

ascotlx 25. Sep 2006 18:08

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:
// 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;
Der Aufruf:

Delphi-Quellcode:
// Bsp.Inahlt von zeile (gelesen aus Textdatei):
// "Text1";"Text2";"Test-"Text3"";"Test4";"Test5-"Hallo"";"1212334";
zeile:=repl1(zeile);
danke schon mal für die Tipps.

ascotlx

MuTzE 25. Sep 2006 18:23

Re: zeichen aus einem String löschen
 
result := str2 + '";';

Dann passt das.

Hawkeye219 25. Sep 2006 18:31

Re: zeichen aus einem String löschen
 
Hier noch ein Vorschlag:

Delphi-Quellcode:
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;
Gruß Hawkeye

alzaimar 25. Sep 2006 18:46

Re: zeichen aus einem String löschen
 
Hier etwas sehr Billiges:
Delphi-Quellcode:
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;
Und hier etwas Schnelles:
Delphi-Quellcode:
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;
Ich hab o.g. Funktion nur gegen dein Beispiel getestet.

EDatabaseError 25. Sep 2006 18:49

Re: zeichen aus einem String löschen
 
Warum so kompliziert wenns auch einfach geht :lol: explodeexplode
-- http://www.delphipraxis.net/internal...hlight=explode

Mfg


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:23 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz