🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: maus.lang.tpascal
Article #21

Re: F: Lesen-Schreiben in Datei %

#21
From: Ingo Oeser
Date: Sun, 29 Dec 1996 00:00
105 lines
3929 bytes
Am 27.12.96 um 10:01 zischte 'ne Mail zum Thema F: Lesen-Schreiben in Datei % von steffen@funker.in-berlin.de
durch's Netz, die offensichtlich nur darauf wartete, von mir gequotet zu
werden.

Hallo steffen (oder auch unter Steffen Lehmann  bekannt),
> Ich m�chte aus einer Datei eine Zeile rauslesen, sie editieren und an die
> gleiche Stelle wieder einf�gen.
>
> Sieht in etwa so aus:
>
> readln(datei,x);
> x[20] := 'J';

Unsauber! Woher weisst du, das x ueberhaupt >20 Zeichen besitzt??? Vorher  
immer mit Length(X) abfragen, ob es ueberhaupt >=20 Zeichen sind! Oder  
nachtraeglich die Laenge auf 20 Zeichen setzen.

> writeln(datei,x);
>
> Beim schreiben bricht er mir ab, warum?

Weil man eine Datei vom Typ Text nur zum Lesen (Reset), Ueberschreiben  
(Rewrite) oder anhaengen (Append) oeffnen kann!

Das hat den Hintergrund, das man nur einfuegen kann, indem man alles  
vorherige in eine neue Datei kopiert, den eizufuegenden Text jetzt auch  
hineinschreibt und danach alles folgende in die neue Datei kopiert.

Das sieht in etwa so aus:


CONST Sicherheitskopie_erstellen=TRUE;
      Src='C:\Hallo';

VAR
   Alt,Neu:Text;
   AltString,NeuString:STRING;
   ZeilenNr,I:LONGINT;

BEGIN
     {Hier solltest du die Puffergroessen erhoehen! "SetTextBuffer" Strg+F1}

     Assign(Alt,Src+'.TXT');
     Assign(Neu,Src+'.$$$');

     Write('Welche Zeile moechten Sie editieren? '); ReadLn(ZeilenNr);

     Reset(Alt);
     Rewrite(Neu);

     I:=1;

     AltString:='';
     NeuString:='';

     WHILE NOT EOF(Alt) DO
     BEGIN

          ReadLn(Alt,AltString);

          IF I=ZeilenNr THEN
          BEGIN

               WriteLn('Alter Text');
               WriteLn(AltString);

               WriteLn('Neuen Text bitte eingeben');
               ReadLn(NeuString);

               WriteLn(Neu,NeuString);      { Geaenderten String schreiben }
          END
          ELSE WriteLn(Neu,AltString);      { Gelesenen String uebernehmen }

          { I erhoehen, weil naechste Zeile gelesen }
          Inc(I);
     END;

     Close(Alt);
     Close(Neu);

     IF Sicherheitskopie_erstellen THEN Rename(Alt,Src+'.BAK');

     Rename(Neu,Src+'.TXT');
END.

Dieser Source loest dein Problem evtl. ja ;)

Er fragt nach dem Einlesen einer Zeile (= AltString) aus der alten Datei  
immer ab, ob die gewuenschte Zeilennr. schon erreicht ist.

Wenn dem so ist, bittet er um Eingabe einer neuen Zeile nach NeuString und  
schreibt diese in die neue Datei (= Neu) ansonsten schreibt er die gerade  
gelesene Zeile (= AltString) in die neue Datei.

Danach wird die neue Datei in die alte umbennannt, vorher jedoch evtl. eine  
Sicherheitskopie der alten Datei angelegt.

Einfach, nicht?

Tsch��
      OESY
--
Computer machen einem das Leben leichter - Sie muessen nur wissen wie ;)
Ansprechpartner fuer Speed-Pascal/2 (SP/2). Fragen? PM an mich!
Technical Details
Message-ID: <6NmPVrBtdAB@p-21.hsociety.berlinet.de>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <6Nd620GGj8B@funker.in-berlin.de>

Show Full Headers
Complete Article Headers
X-Google-Language: GERMAN,ASCII
X-Google-Thread: 13679c,511bfcaf541ab881
X-Google-Attributes: gid13679c,public
X-Google-Thread: 110467,511bfcaf541ab881
X-Google-Attributes: gid110467,public
X-Google-Thread: 10ddc3,511bfcaf541ab881
X-Google-Attributes: gid10ddc3,public
X-Google-Thread: 110930,511bfcaf541ab881
X-Google-Attributes: gid110930,public
X-Google-Thread: 10263e,511bfcaf541ab881
X-Google-Attributes: gid10263e,public
From: OESY@HSOCIETY.berlinet.de (Ingo Oeser)
Subject: Re: F: Lesen-Schreiben in Datei %
Date: 1996/12/29
Message-ID: <6NmPVrBtdAB@p-21.hsociety.berlinet.de>
X-Deja-AN: 206748014
references: <6Nd620GGj8B@funker.in-berlin.de>
content-type: text/plain; charset=iso-8859-1
x-gateway: ZCONNECT zelator.berlinet.de [UNIX/Connect v0.74b4]
mime-version: 1.0
x-zc-telefon: V+49-38828-24349
newsgroups: maus.lang.tpascal,blindnet.computer,fido.ger.pascal,z-netz.alt.sprachen.pascal,z-netz.sprachen.pascal
x-mailer: CrossPoint v3.1