Dopisywanie do pliku

0

Witam,
Jak moge dopisać zawartość zmiennej strong do 3 linijkiw w pliku tekstowym? Z tego co wiem to Append dopisuje na końcu.. i nie wiem jak to przerobić aby cofnąć się do 3 linijki.

Może nie wszytsko jest jasne więc zobrazuje to na przykładzie. Mam plik tekstowy w postaci:

linijka pierwsza
linijka druga
linjka trzecia
linijka czwarta

i chce sie dopisac pomiedzy linjke druga a trzecią czyli chce doprowadzić plik do postaci:

linijka pierwsza
linijka druga
LINIJKA DOPISANA PRZEZ PROGRAM
linijka trzecia
linijka czwarta

Mam nadzieję ze otrzymam odpowiedź. Z gory dzięki.
Pozdrawiam.

0

seek.

0

mam tak:

var
 filek: TextFile;
begin
  AssignFile(filek, dir);
  Reset(filek);
  seek(filek, 3); // [Error] Unit1.pas(585): Incompatible types
end;

Zaznaczm ze chodzi mi o plik tekstowy! A nie plik typowany(rekordowy)

0

zrób to łatwiej:
1.Przpisz plik do TMemo.
2.Instrukcją Memo1.Lines.Insert(2, 'linijka do wpisu'); {2 bo linie w memo są liczone od 0.
3.Przepisz zawartosc TMemo do pliku.

I po problemie :)

0

Zostały tu popełnione 2 błędy:

  • seek- nie do plików tekstowych
  • Reset(plik) - tylko do odczytu

A do takiej operacji nie prosto będzie na plikach tekstowych - można chyba to zrobić za pomocą strumienia .. i wtedy wykorzystać Seek, ale to też będzie ciężko.. - albo wykorzystać TStringList (nie Memo!) - chyba najlepiej..

0

Go:

var Plik_Stary : TextFile;
      Plik_Nowy : TextFile;
      Linia : byte;
      Wstawiasz : string;
      Temp : string;
      Licznik : byte;

begin  // otwieramy pliczki i jedziemy z koksem
assign(plik_stary,'plik\ktory\chcesz\zmieniac.txt');
assign(plik_nowy,'plik\ktory\bedzie\pol-klonem.txt');
reset(plik_stary);
rewrite(plik_nowy);

repeat // teraz przepisujemy pliczek az do lini po ktorej chcemy cos dodac
readln(plik_stary,temp);
writeln(plik_nowy,temp);
inc(licznik);
until licznik=Linia;

writeln(plik_nowy, wstawiasz); // wstawiamy to co chcielismy dodac

repeat // i przepisujemy pliczek do konca
readln(plik_stary,temp);
writeln(plik_nowy,temp);
until eof(plik_stary);

close(plik_stary);
close(plik_nowy);
end;

W tym sa bledy ale nie mam sily wlaczac teraz delphi czy pascala i poprawiac to. Masz caloksztalt i zrob z tego pozytek. Aha musisz jeszcze na koniec usunac stary plik i zmienic nazwe nowego (posluz sie zmienna do zapisania starej nazwy), ale to juz latwizna, zas wszystko jest w helpie pod bardzo latwymi do znalezienia haslami. Powodzenia. :]

0

Wspominał już o tym DETOX , można wykorzystać TStringList, mogłoby to wyglądć mniej więcej tak

var dane:Tstringlist;
begin
dane:=tstringlist.Create; //przydzial pamięci
dane.LoadFromFile('f:\plik.txt'); //zaladowanie danych
dane.Insert(2,'linijka trzecia'); //wstawienie w 3 linijce tekstu "linijka trzecia"
dane.SaveToFile('f:\plik.txt'); //zapisanie danych
dane.Free; // zwolnienie pamieci
end;

0

Metoda z insertem z tego co widze jest swietna :] Ale nie zadziala jesli nasz programista pisze w Pascalu. A tak <ort>w ogóle</ort> to dzieki. Mi tez sie to przyda.

1 użytkowników online, w tym zalogowanych: 0, gości: 1