Announcement

Collapse
No announcement yet.

bestimmte Leerzeichen aus String entfernen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • bestimmte Leerzeichen aus String entfernen

    Hallo,
    ich möchte bestimmte Leerzeichen aus einem mir bekannten String entfernen.
    z.B.
    soll der erste durch den zweiten String ersetzt werden

    <i>"DataBase"="C:\\Programme\\ICQ2000\\DB"</i>

    <i>"DataBase"=" D:\\Internet\\ICQ2000\\DB"</i>

    <b>das mache ich mit folgender Anweisung:</b>

    procedure TForm1.Button1Click(Sender: TObject);
    var
    f: file;
    l: longint;
    datei, altstring, neustring, s: string;
    begin
    altstring := edit1.text;
    neustring := edit2.text;
    datei := edit3.text;

    s := altstring;
    assignFile(f, datei);
    reset(f,1);
    for l := 0 to filesize(f)-length(altstring)-1 do
    begin
    Application.ProcessMessages;
    seek(f,l);
    blockread(f,altstring[1],length(altstring));
    if altstring = s then
    begin
    seek(f,l);
    blockwrite(f,neustring[1],length(neustring));
    label1.caption := 'Status: Stelle gefunden und gepatcht!';
    end;
    Application.ProcessMessages;
    end;
    closeFile(f);
    end;

    <b>Wie kann ich aber die Leerzeichen vor " D:\\Internet..." entfernen?</B>

    Würde ich den Text ohne Leerzeichen eingeben, hätte ich am Ende von "Internet" noch die zwei letzten Buchstaben von Programme.

    Giebt es da eine bessere Methode?

    DRINGEND

  • #2
    Hi Enrico,

    vielleicht hilft Dir der Befehl "Trim" weiter.

    Grüße, Reimun

    Comment


    • #3
      Hast du da vieleicht ein Beispiel?
      komme mit der Delphi Hilfe nicht so klar

      dank

      Comment


      • #4
        Hi,<p>
        wenn ich dein Programm richtig verstehe, willst du in einer Binär-Datei Strings patchen. Die Frage ist jetzt natürlich, wie werden die Strings dort ausgewertet.
        Handelt es sich um klassische Pascal-Strings mit dem Längenbyte am Anfang, oder sind es nullterminierte Strings?<p>
        Im ersten Fall brauchst du nur den neuen String über den alten drüberzuschreiben. Dadurch daß im ersten Byte die Länge des Strings steht, werden alle darüberhinausgehenden Bytes ignoriert.<p>
        Wenn du also s1 := 'C:\\Programme\\ICQ2000\\DB' mit s2 := 'D:\\Internet\\ICQ2000\\DB' überschreibst, ist das letzte "B" von s1 nur noch Datenmüll und wird ignoriert.<p>
        Handelt es sich allerdings um nullterminierte Strings, mußt du s1 mit s2 := 'D:\\Internet\\ICQ2000\\DB'+#0 überschreiben. Dadurch bleibt dann von s1 nur noch das Null-Byte übrig.<p>
        Trim() brauchst du also eigentlich überhaupt nicht.<p>
        Hoffe, dir damit geholfen zu haben,<p>
        Grüße, Reimun

        Comment


        • #5
          Was mache ich aber, wenn mein erster String 10 Buchstaben hat und mein zweiter nur 4 Buchstaben?
          Wie kann ich es realisieren, das mein Programm autom. die Länge des ersten Strings erkennt und nach Tastendruck die Stringlänge des zweiten strings anpasst

          Comment


          • #6
            Auch hier ist wieder zu unterscheiden, ob du Pascal-Strings oder nullterminierte Strings hast.<p>
            Bei Pascal-Strings kannst du das Längenbyte des Strings auslesen (s[0]) und direkt das Längenbyte des zweiten Strings setzen: s2[0] := s1[0]<p>
            Bei nullterminierten Strings kannst du entweder mit Length(s) arbeiten oder - falls du den String nicht in Delphi extrahieren kannst - mußt du manuell bis zum Null-Byte suchen, was natürlich entsprechend aufwendiger ist.<br>
            Falls Length(s) geht, setzt du dann deinen zweiten String mit SetLength(s2, Length(s1)).<p>
            Ob das Ergebnis dann Sinn macht, ist natürlich eine andere Frage

            Comment


            • #7
              Hi

              Vorsicht mit dem Patchen ! Sollte es sich um eine Delphi EXE/DLL etc. handeln und der zu patchende String im Program z.B. als Konstante definiert sein gibt's Probleme. Der Delphi Compiler/Linker setzt noch 2 LongWord's davor. Diese bestimmen die Länge eines Delphi LongString's. Das ist der kleine Unterschied zwischen normalen PChar's, nullterminiert, und delphi LongString's, diese sind nämlich nullterminiert UND haben einen Längen-LongWord !! Delphi verwaltet diesen aber völlig transparent (man bekommt davon nichts mit), ABER als Konstante gespeichert ist dieser Längenwert schon vorhanden !!
              Übrigens, in den neueren Version > D2 werden ALLE Konstanten-Strings in Delphi als LongStrings in der EXE gespeichert. Logisch, da ShortStrings meistens mehr Platz verbrauchen.

              Gruß Hage

              Comment

              Working...
              X