AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

zeichen aus einem String löschen

Ein Thema von ascotlx · begonnen am 25. Sep 2006 · letzter Beitrag vom 26. Sep 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von ascotlx
ascotlx

Registriert seit: 8. Mär 2005
Ort: Hamburg
97 Beiträge
 
Delphi 7 Professional
 
#1

zeichen aus einem String löschen

  Alt 25. Sep 2006, 18:02
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...

Kann mir jemand - auf die schnelle - Helfen ???

Besten Dank
ascotlx
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: zeichen aus einem String löschen

  Alt 25. Sep 2006, 18:08
Hi,

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

var = StringReplace(var, '""', '"', [rfReplaceAll]);
  Mit Zitat antworten Zitat
Benutzerbild von ascotlx
ascotlx

Registriert seit: 8. Mär 2005
Ort: Hamburg
97 Beiträge
 
Delphi 7 Professional
 
#3

Re: zeichen aus einem String löschen

  Alt 25. Sep 2006, 18:19
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
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: zeichen aus einem String löschen

  Alt 25. Sep 2006, 18:24
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.
  Mit Zitat antworten Zitat
Benutzerbild von MuTzE
MuTzE

Registriert seit: 24. Sep 2003
59 Beiträge
 
#5

Re: zeichen aus einem String löschen

  Alt 25. Sep 2006, 18:29
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
  Mit Zitat antworten Zitat
Benutzerbild von ascotlx
ascotlx

Registriert seit: 8. Mär 2005
Ort: Hamburg
97 Beiträge
 
Delphi 7 Professional
 
#6

Re: zeichen aus einem String löschen

  Alt 25. Sep 2006, 19:08
Moin moin,

ich habe mir aus Euren Antworten folgendes zusammengestrickt....

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
  Mit Zitat antworten Zitat
Benutzerbild von MuTzE
MuTzE

Registriert seit: 24. Sep 2003
59 Beiträge
 
#7

Re: zeichen aus einem String löschen

  Alt 25. Sep 2006, 19:23
result := str2 + '";';

Dann passt das.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#8

Re: zeichen aus einem String löschen

  Alt 25. Sep 2006, 19:31
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
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: zeichen aus einem String löschen

  Alt 25. Sep 2006, 19:46
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
EDatabaseError

Registriert seit: 11. Mai 2005
Ort: Göppingen
1.238 Beiträge
 
Delphi 2007 Professional
 
#10

Re: zeichen aus einem String löschen

  Alt 25. Sep 2006, 19:49
Warum so kompliziert wenns auch einfach geht explodeexplode
-- http://www.delphipraxis.net/internal...hlight=explode

Mfg
Tobias
It's not a bug, it's a feature.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:29 Uhr.
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