operacja na pliku tekstowym w PASCALU

0

Witam mam takie zadanie

Wczytaj plik tekstowy i na początku wszystkich zdań wpisz tekst : zdanie#: gdzie #
ma być numerem zdania. Wypisać informację o liczbie zdań .

Bardzo proszę o pomoc ja zrobiłem program ale on tylko wczytuje plik tekstowy i daje informacje o liczbie wyrazow a nie zdań:( i jak zrobić aby się numerował???

 

program Project1;



uses
  SysUtils;
var
  PlikTxt: Text;
  Wiersz: String;
  i,j: Integer;

begin

  Assign(PlikTxt, 'c:\plik1.txt');
  Reset(PlikTxt);

  while not Eof(PlikTxt) do
  begin
  i:=0;
    ReadLn(PlikTxt, Wiersz);
    if (wiersz <> '') then
    i:=i+1;
    for j := 1 to length(wiersz) do
    begin
    if (wiersz[j] = ' ') then
    i:=i+1;
    end;
    Write(Wiersz);
    WriteLn(' ',i);
  end;

  Close(PlikTxt);
  ReadLn;
 
end.

0

Przy założeniu, że jedno zdanie to jedna linijka tekstu, a calośc mamy tylko wypisać na ekran z ilością linijek to chyba najprościej będzie tak jak poniżej:

program Project1;

{$APPTYPE CONSOLE}

var
  S : string;
  TF : TexTFile;
  Cnt : integer;
begin
  Cnt := 0;
  AssignFile(TF, 'D:\test1.txt');
  Reset(TF);
  if IOResult = 0 then
  begin
    while not EOF(TF) do
    begin
      Readln(TF, S);
      if S <> '' then
      begin
        Cnt := Cnt + 1;
        Writeln('Zdanie ', Cnt, ': ', S);
      end;
    end;
    CloseFile(TF);
    Writeln('Ilosc zdan: ', Cnt);
    Readln;
  end;
end.

I koniecznie poczytaj kompendium na 4p, bo pytasz o banalne podstawy, a jeżeli dobrze zrozumiałem treść Twojego zadania to jest ono również bardzo banalne do wykonania, wystarczy chwilę pomyślec, ale trzeba znać podstawy języka.

0

Wielki dzięki bardzo mi pomogłeś. A polecasz jakąś konkretną stronkę o operacjach na plikach???

Ale właśnie dowiedziałem się że zadanie nie ma być brane od nowej linijki tylko nowe zdanie od dużej litery niezależnie od linijek :) więc jeżeli to nie duży problem prosiłbym o zmodyfikowanie programu.

Jeżeli nie to Sam będę próbował bo bardzo mnie naprowadziłeś jeszcze raz dziękuje.

0

Pewnie po co się postarać i pomyśleć, lepiej na forum wyłudzić gotowca i zaliczyć, zdać, a później zapomnieć. Taka zmodyfikowana zasada trzech "Z". Ech, masz. Nie jest idealne, sam sobie to dopasuj do swoich potrzeb. Bo na przykład jak w pliku będzie:

Test
Tralala.

To wynikiem będzie zdanie Test Tralala., ale tak chyba ma być skoro założymy, że zdania mogą być różnie ułożone. Poza tym zdania w pliku wejściowym powinny być w standardowym kodowaniu Windowsa CP, bo takowe przekonwertuje funkcja którą dodałem. I widać, że sezon zaliczeń się zaczął. Ale się skończy wasze cwaniactwo i madmike będzie wywalał takie posty, bo ja będę w pracy albo zmęczony po niej i nie będę na takie coś odpisywał (teraz wyjątkowo odpisałem, bo i tak nie chce mi się jeszcze iść spać to siedze chociaż jutro na rano do roboty), tylko sam wywalać będę do Kosza jak zauważe. Ja wiem, byłeś w szpitalu, z reką w gipsie albo nauczyciel nic nie tłumaczył. Tak, lenistwo można co już nie raz widzieliśmy usprawiedliwiać na tysiąc sposóbów. Dostałeś wcześnej naprowadzający Ciebie przykład to trzeba było siąść i pokombinowac, ale po co frajer olesio zrobi za Ciebie. Ostatni raz, bo się za dobrzy dla Was zrobiliśmy. Ale po co "strzępić klawiaturę" po próżnicy, można gadać i tak będzie masę takich postów - już niedlugo coraz więcej ;/ Ale zadanie ogólnie nie jest trudne, skoro taki noob jak ja je ogarnął, to Ty też byś dał radę, tylko warunek jest taki, że trzeba chcieć, a nie udać że coś tam się modziło i spocząć na laurach.

program for_lazy_hiob21;

{$APPTYPE CONSOLE}

uses
  WIndows;

const
  Separator = '.';
  AFileName = 'D:\test.txt';
  OkChars : set of Char = ['A'..'Z', 'Ć', 'Ł', 'Ó', 'Ś', 'Ż', 'Ź'];

function OEMWrite(AnsiText : string) : string;
var
  S, D : PChar;
begin
  Result := '';
  if AnsiText <> '' then
  begin
    S := PChar(AnsiText);
    GetMem(D, Length(S));
    AnsiToOEM(S, D);
    Result := D;
  end;
end;

var
  TF : TexTFile;
  X, Cnt : integer;
  ALine, Asentence, AText : string;
begin
  Cnt := 0;
  AText := '';
  AssignFile(TF, AFileName);
{$I-}
  Reset(TF);
{$I+}
  if IOResult = 0 then
  begin
    while not EOF(TF) do
    begin
      Readln(TF, ALine);
      if ALine <> '' then
      begin
        AText := AText + ALine;
      end;
    end;
    CloseFile(TF);
    X := Pos(Separator, AText);
    while X > 0 do
    begin
      ASentence := Copy(AText, 1, X);
      if X <= Length(AText) then
      begin
        AText := Copy(AText, X + Length(Separator), Length(AText));
      end;
      repeat
        if ASentence[1] in OKChars then
        begin
          Break;
        end;
        Delete(Asentence, 1, 1);
      until Length(ASentence) = 0;
      if ASentence <> '' then
      begin
        Cnt := Cnt + 1;
        Writeln('Zdanie #', Cnt, ': ', OEMWrite(ASentence));
      end;
      X := Pos(Separator, AText);
    end;
    Writeln(OEMWrite('Ilość zdań w pliku: "'), AFileName, '" = ', Cnt);
  end
  else
  begin
    Writeln('Nie znaleziono pliku: "', AFileName, '"!');
  end;
  Readln;
end.

P.S.: program rozpatruje zdania oznajmujące, dla innych końcówek radź już sobie sam, jeżeli tego wymagać będzie wykładowca czy tam nauczyciel.

0

No masz racje z tym lenistwem po prostu mi się nie chciało pomyśleć... To już ostatni mój taki post teraz jeżeli coś wyśle to "prawie " zrobione zadanie, nie będę liczył na gotowca. Dziękuje za chęci i za zadanie już takie coś ode mnie się nie powtórzy.

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