Announcement

Collapse
No announcement yet.

Erstes zeichen aus Datei entfernen

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

  • Erstes zeichen aus Datei entfernen

    Hallo,<BR>
    ich habe eine Datei (Textdatei ohne Endung), die als erstes Zeichen einen Seitenwechsel (0D bzw #12 glaub ich) hat.<BR>
    Dieses Zeichen muß ich entfernen, um danach mit dieser Datei weiterarbeiten zu können.<BR>
    Ich wollte aber kein Memo oder so benutzen, da ich nicht weiß, wie groß diese Datei sein kann.<BR>
    Ich habe mich nun schon im Forum umgeschaut und folgende Prozedur gefunden, die doch genau das machen würde, oder.?
    <PRE>
    procedure UpdateTextFile(fileName:string);
    var
    TS:TStringStream;
    TM:TMemoryStream;
    s:string;
    begin
    TS1:=TStringStream.Create('');
    TM:=TMemoryStream.Create;
    TM.LoadFromFile(fileName);
    TS1.CopyFrom(TM,0);
    TM.Free;
    s:=TS.DataString;
    pos1:=pos(#12,s);// # 12 ?????
    TS1.Position:=pos1+1;
    TM:=TMemoryStream.Create;
    TM.CopyFrom(TS1,TS1.Size-pos1);
    TM.SaveToFile(fileName);
    TM.Free;
    TS1.Free;
    end;
    </PRE>

    Aber bei mir funktioniert das nicht.<BR>
    Erstens ist dort irgendwie was mit TS und TS1 und pos1 durcheinander,<BR>
    wollte das so geradebiegen,

    <PRE>
    procedure UpdateTextFile(fileName:string);
    var
    TS,TS1:TStringStream;
    TM:TMemoryStream;
    s:string;
    pos1:integer;
    begin
    TS1:=TStringStream.Create('');
    TM:=TMemoryStream.Create;
    TM.LoadFromFile(fileName);
    TS1.CopyFrom(TM,0);
    TM.Free;
    s:=TS1.DataString;
    pos1:=pos(#12,s);// # 12 ?????
    TS1.Position:=pos1+1;
    TM:=TMemoryStream.Create;
    TM.CopyFrom(TS1,TS1.Size-pos1);
    TM.SaveToFile(fileName);
    TM.Free;
    TS1.Free;
    end;
    </PRE>

    aber da kommt dann eine Zugriffsverletzung (Stream-Lesefehler)<BR>
    Kann sich das nochmal jemand ansehen bitte?<BR>
    Danke im Vorraus

  • #2
    Hallo Beate,<br>Zwei Memorystreams deklarieren. In den ersten die Daten einlesen. Danach in diesem Stream mit seek auf das zweite Zeichen positionieren. Danach mit copyfrom die Anzahl der Zeichen - 1 in den zweiten Stream kopieren und diesen abspeichern.<br>cu Michae

    Comment


    • #3
      Bitte könntest du mir das an einem Beispiel veranschaulichen, ich komm nicht klar.

      Dank

      Comment


      • #4
        Ich hab mir nochmal Mühe gegeben. Ist das so richtig?

        <PRE>
        procedure UpdateTextFile(fileName:string);
        var
        TM,TM1:TMemoryStream;
        begin
        TM:=TMemoryStream.Create;
        TM1:=TMemoryStream.Create;
        TM.LoadFromFile(fileName);
        TM.Position:=2;
        TM1.CopyFrom(TM,TM.Size-2);
        TM1.SaveToFile(fileName);
        TM.Free;
        TM1.Free;
        end;
        </PRE&gt

        Comment


        • #5
          Hi Beate,<PRE>
          procedure TForm1.KillFistCharFromFile(AFileName: String);
          var
          TM : TMemoryStream;
          TM1: TMemoryStream;
          begin
          TM:=TMemoryStream.Create;
          try
          TM1:=TMemoryStream.Create;
          try
          TM.LoadFromFile(AFileName);
          TM.Seek(1, 0);
          TM1.CopyFrom(TM,TM.Size-2);
          TM1.SaveToFile(AFileName);
          finally
          TM1.Free;
          end;
          finally
          TM.Free;
          end;
          end;
          </PRE>
          Gruß, Fran

          Comment


          • #6
            Hi,<BR>
            ich hab doch glatt einen Fehler drin:<BR>
            es muss natürlich nur 1 abgezogen werden...<BR>
            TM1.CopyFrom(TM,TM.Size-1); <BR>
            Fran

            Comment


            • #7
              :-)<br>warum hast du so viele "Muffebehandlungen" drin Frank :-

              Comment


              • #8
                Hi Michael,<BR><BR>
                OK, über die Notwendigkeit kann man schon streiten.<BR>
                Aber auch ein TMemoryStream.Create kann mal fehlschlagen, und ich gebe halt nur Objekte frei, die auch tatsächlich erzeugt werden.<BR>
                <BR>
                Gruß, Fran

                Comment


                • #9
                  ... du hast schon Recht. Eine Exceptionbehandlung reicht hier aber, da bei einem Fehler das ganze Konstrukt hinfällig wird. (War keine Kritik!

                  Comment


                  • #10
                    Danke, danke an alle, die sich meines Problems angenommen haben.<BR>
                    Funktioniert einwandfrei.<BR>
                    Wirklich toll, wie schnell man hier geholfen bekommt

                    Comment

                    Working...
                    X