Delphi-PRAXiS

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

alzaimar 25. Sep 2006 18:51

Re: zeichen aus einem String löschen
 
Zitat:

Zitat von EDatabaseError
Warum so kompliziert wenns auch einfach geht :lol: explodeexplode
-- http://www.delphipraxis.net/internal...hlight=explode

Und langsam, weil er sie doch (vielleicht) wieder zusammenbasteln will?

Hawkeye219 25. Sep 2006 19:03

Re: zeichen aus einem String löschen
 
Zitat:

Zitat von alzaimar
Zitat:

Zitat von EDatabaseError
Warum so kompliziert wenns auch einfach geht :lol: explodeexplode
-- http://www.delphipraxis.net/internal...hlight=explode

Und langsam, weil er sie doch (vielleicht) wieder zusammenbasteln will?

Zudem überleben die doppelten Anführungszeichen einen Aufruf von Explode...

Gruß Hawkeye

MuTzE 25. Sep 2006 19:08

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.

alzaimar 25. Sep 2006 20:26

Re: zeichen aus einem String löschen
 
@Hawkeye: Ich ging davon aus, das er aus den Teilstrings die Quotes weglöscht.

Zitat:

Zitat von MuTzE
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.

Ey Mutz :mrgreen: , viele Wege führen nach Rom.
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.

MuTzE 25. Sep 2006 20:40

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

ascotlx 26. Sep 2006 08:25

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