Skocz do zawartości

Pascal - operacja na dwóch plikach tekstowych


Recommended Posts

Witam.

Problem jest następujący:

Mam 2 pliki: A i B. A-plik z danymi, B-plik, w którym mają się znaleźć przerobione dane.

plik A wygląda tak:

[2]

jakaś liczba

jakaś liczba

jakaś liczba

[8]

jakaś liczba

jakaś liczba

 

ilość "jakichś liczb" może być dowolna.

Program musi po otworzeniu pliku A i napotkaniu znaku "[" a następnie "2" wiedzieć, że ma do czynienia z konkretnymi liczbami, więc przechodzi do następnej linii pliku, przerabia napotkaną liczbę i zapisuje od razu taką przerobioną liczbę do pliku B. Wykonuje tę operację, dopóki nie napotka znaku "[" a następnie "8", co oznacza, że znajdują się tam już inne liczby, które przerabia w inny sposób.

 

Nie wiem jaką zrobić pętlę, by mi przerobiło wszystkie liczby poniżej linii [2] do linii [8].

Ten kod wykonuje się prawie ok, tylko przez polecenie "eof" dochodzi do samego końca pliku, a ma dochodzić do [8] i kończyć. "hehe" użyłem jako proste "przerobienie" liczby.


program ytestt;

uses crt;

 

var podczyt,pzapis:text;

    tresc,linia:string;

    i:integer;
begin
 
  assign(podczyt, 'a.txt');
  assign(pzapis, 'b.txt');
  reset(podczyt);
  readln(podczyt,tresc);
  rewrite(pzapis);
  i:=0;
  for i:=1 to length(tresc) do
     if (tresc[i]='[') and (tresc[i+1]='2') then
     begin
         append(pzapis);
         writeln(pzapis,'przerobione:');
         repeat
         readln(podczyt,linia);
         writeln(linia);
         linia:='hehe';
         writeln(pzapis,linia);
         writeln('petla ', i);
         until eof(podczyt);
     end;
  close(podczyt);
  close(pzapis);
readln;
end.
Link to post
Share on other sites

Dawno nie używałem Pascala. Ale spróbuj tak:

 

 

program ytestt;

uses crt;
var

podczyt,pzapis:text;
linia:string;

po_2,po_8:Boolean;
begin
  assign(podczyt, 'a.txt');
  assign(pzapis, 'b.txt');
  reset(podczyt);
  rewrite(pzapis);

  po_2=FALSE;

  po_8=FALSE;
  while not eof(podczyt) do

          {

          readln(podczyt,tresc);

          if (pos(tresc,'[2]')<0) po_2=TRUE;

          if po_2 and not po_8 writeln(pzapis,tresc);

          if (pos(tresc,'[8]')<0) po_8=TRUE;

          }
close(podczyt);
close(pzapis);
readln;
end.

Edytowane przez mw1975
Link to post
Share on other sites

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Odpowiedz w tym wątku...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...