Skocz do zawartości

Problem z procedurami wczytywania i wypisywania plików


dezerter69

Polecane posty

Witam,

Trochę za późno zabrałem się za pisanie programu na zaliczenie. Temat mojego projektu to statystyki pliku , ile slow ile znakow ile linii i histogram. Ten program chce napisać sam, ale że na laborkach z programowania podczas wykłądania procedur i funkcji zagapiłem się i praktycznie nic nie wyniosłem z tych zajęć to mam teraz pewne problemy zrozumieć procedury i funkcje.

Na razie moim problemem jest napisanie dwóch procedur 1. wczytanie pliku 2. wypisanie zawartosci pliku.

Oto co mam, jak mówiłem, nie do końca łapie ocb więc program może być trochę nie logiczny.

 

 

program wczytwypis;

uses   WczytaniePliku, WypisaniePliku;
begin
 WczytaniePliku (var plikOtwierany:text);
 WypisaniePliku  (var plikOtwierany:text);
end.

 

Wiem, że w przy deklaracji w programie procedury WczytywaniePliku nie może być w nawiasie (var plikOtwierany) bo nigdzie wcześniej nie jest sczytywany ale nie wiem w jaki sposób pierwsza procedura może nadać zmienna globalną by druga procedura mogła ją dostać więc napisałem to tak i liczę, że napiszecie mi/ nakierujecie mi jak mam to rozwiązać.

 

a tutaj procedury napisane w Lazarusie przy pomocy modułów.

 

unit WczytaniePliku;
interface
uses
 Classes, SysUtils;
Procedure WczytaniePliku (var plikOtwierany:text);
implementation
procedure WczytaniePliku (var plikOtwierany:text)  ;
 var
nazwaPliku:string;
 begin
Writeln('Podaj nazwę pliku wraz z rozszerzeniem np tekst.txt strona.php itd. Plik musi mieć rozszerzenie tekstowe.');
readln(nazwaPliku);
assign(PlikOtwierany,nazwapliku);
append(PlikOtwierany);
reset(PlikOtwierany);
 end;
end.

 

unit WypisaniePliku;
{$mode objfpc}{$H+}
interface
uses
 Classes, SysUtils;
procedure WypisaniePliku (var plikOtwierany:text);
implementation
procedure WypisaniePlku (var plikOtwierany:text);
var
 tekst:string;
 begin
While(not(eof(plikOtwierany))) do
 	begin
 	readln(tekst);
 	writeln(tekst);
 	end;
 end;
end.     			

Link do komentarza
Udostępnij na innych stronach

Ten kod to jedno wielkie WTF! A do tego jak zwykle pewnie parser na tym forum rozwalił dokumentnie formatowanie kodu. Musiałbyś najpierw ogarnąć podstawy języka. Ja bym to zrobił na funkcjach WinAPI. W Twoim kodzie w ogołe nie myślisz co robisz, jakieś najpierw Append, później Reset. Bez sensu. Kombinowął bym jak wspomniałem z użyciem modułu Windows i funkcji WinAPI.

 

A i jeżeli piszesz pod FPC/Lazarusem to do kodu, do którego podam link musisz dodać dyrektywę kompilatora {$MODE DELPHI}. Oto link do przykładowego kodu zawierającego dwie idealne wedle mnie funkcje do wczytywania tekstów ANSI: http://pastebin.com/Ph2c7JJc i na pewno nie ma sensu robić promtpa o nazwę pliku w funkcji. Co jeśłi przeniósł byś program z konsoli na aplikację okienkową? Tam już Writeln('Tekst'); Readln(Zmienna); nie przejdzie przecież, bo konsoli nie ma.

 

Na pewno dużym błedem jest zabieranie się za coś na ostatnia chwilę, tymbardziej jeśłi nie ogarnia się nawet podstaw języka. Masz na zachęte, przykład jak według mnie to powinno wyglądać. Na pewno ma to jakieś "ręce i nogi" w porównaniu do Twojego "kodu". W kodzie na http://pastebin.com/xXyALiPB w zmiennej Content będziesz miał wszystkie linijki tekstu oddzielone znakiem końca linii CRLF (#13#10). Wykorzystać ten tekst możesz do ewentualnego dalszego przetwarzania, zliczania znaków, itp, itd.

Pozdrawiam: olesio

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...