Cześć wszystkim. Muszę napisać ten program na jutro tylko nie wiem jak. Prosze was o pomoc. Z góry dziękuje.
![Zdjęcie](https://www.forum.tweaks.pl/public/style_images/master/profile/default_large.png)
[delphi] program który wyświetla ilość występowania danej litery w pliku
Rozpoczęty przez
program
, 09 03 2008 17:45
4 odpowiedzi w tym temacie
#1
Napisano 09 03 2008 - 17:45
#2
Napisano 09 03 2008 - 22:59
Może zaproponuję coś takiego dla aplikacji konsolowej - ważna jest idea którą w łatwy sposób możesz przenieść do aplikacji "okienkowej". Zabezpiecz przed brakiem, błędami odczytu z pliku np. (try ... finally ). Pisałem w notatniku więc przepraszam
za błędy.
![:turned:](/public/style_emoticons/default/dry.png)
{$APPTYPE CONSOLE}uses System;var znak: char; Src : File; BytesRead,i,count: Integer; Buff : array[0..1024] of Byte;begin writeln('Podaj znak'); readln(znak); count:=0; AssignFile(Src, 'C:\jakis_plik.???'); Reset(Src, 1); repeat BlockRead(Src, Buff, 1024, BytesRead); for i:=0 to bytesread do if chr(buff[i])= znak then inc(count); until (BytesRead = 0); CloseFile(Src); Writeln('Znak ',znak,' Wystapil w pliku ',inttostr(count),' razy'); Readln;end.
#3
Napisano 09 03 2008 - 23:10
napisałem coś takiego ale nie wiem co jest w nim nie tak
program Project1;{$APPTYPE CONSOLE}uses SysUtils;varLitery:array [65..90] of integer;i,s:integer;plik:Text;nazwa_pliku:String;text:string;linia : string;znak:char;beginWriteln('Podaj nazwe pliku, ktory chcesz otworzyc (pamietaj o rozszerzeniu!)');Read(nazwa_pliku);Assign(plik,nazwa_pliku);Reset(plik);while not EOF(plik) dobegin read(plik,linia); text:= text+linia ; while not eoln(plik) do for i:=65 to 122 do Litery[i]:=0; for i:=1 to Length(text) do Litery[ord(text[i])]:=Litery[ord(text[i])]+1; for i:=65 to 122 do if Litery[i]<>0 then writeln(chr(i),' - ',Litery[i]); end;close(plik); readln;end;end.
#4
Napisano 10 03 2008 - 00:21
Hmm ... piszesz w Pascalu 7.0 skoro się upierasz to : proponuje odczytywać plik po bajcie - wiem trochę wolno ( i trochę prymitywnie), ale dla plików txt wystarczy. Jeśli nie chcesz używać "blockread" i innych funkcji Delphi to ok - napisz schemat programu w delphi to uzupełnie i poprawie (niestety nie mam go zainstalowanego by napisać od podstaw).
A co jest źle w zaproponowanym przez ciebie programie:
Zamiast Read(path do pliku) użyj Readln(path do pliku)
text jest symbolem zastrzeżonym nie używaj go jako nazwa zmiennej.
Wczytujesz plik, czytasz linie i dalej co ? sprawdzasz czy kursor jest na końcu w pliku ?.
tu masz poprawne użycie funkcji eoln
http://4programmers.net/Delphi/Eoln
sory ale nie rozumiem logiki kolejnych poleceń. Jaki miałeś algorytm ???
funkcje dotyczące operacji na plikach:
http://4programmers.net/Delphi/Pliki/Operacje
oraz na stringach:
moduł sysutils:
http://4programmers.net/Delphi/Modu%C5%82y/SysUtils
Dodatkowo w module system są ine polecenia odnośnie stringów.
Jeśli zaproponowany przeze mnie przykład nie jest tym właściwym, to opisz bliżej program, a postaram się pomóc
varLitery_count:array [65..90,0..0] of integer;i:integer;plik:file of byte;nazwa_pliku:String;znak:byte;beginWriteln('Podaj nazwe pliku, ktory chcesz otworzyc (pamietaj o rozszerzeniu!) i nacisnij ENTER');Readln(nazwa_pliku);Assign(plik,nazwa_pliku);Reset(plik);while not EOF(plik) do begin read(plik,znak); if ((znak>=97)and(znak<=122))then znak:=ord(upcase(chr((znak)))); if ((znak>=65)and(znak<=90))then inc(litery_count[znak,0]); end;for i:=65 to 90 do writeln('Znak ',chr(i),' Wystpil ',litery_count[i,0]);close(plik);readln;end.
A co jest źle w zaproponowanym przez ciebie programie:
Zamiast Read(path do pliku) użyj Readln(path do pliku)
text jest symbolem zastrzeżonym nie używaj go jako nazwa zmiennej.
Wczytujesz plik, czytasz linie i dalej co ? sprawdzasz czy kursor jest na końcu w pliku ?.
tu masz poprawne użycie funkcji eoln
http://4programmers.net/Delphi/Eoln
sory ale nie rozumiem logiki kolejnych poleceń. Jaki miałeś algorytm ???
![:turned:](/public/style_emoticons/default/unsure.png)
funkcje dotyczące operacji na plikach:
http://4programmers.net/Delphi/Pliki/Operacje
oraz na stringach:
moduł sysutils:
http://4programmers.net/Delphi/Modu%C5%82y/SysUtils
Dodatkowo w module system są ine polecenia odnośnie stringów.
Jeśli zaproponowany przeze mnie przykład nie jest tym właściwym, to opisz bliżej program, a postaram się pomóc
![:turned:](/public/style_emoticons/default/dry.png)
#5
Napisano 10 03 2008 - 15:53
dzięki ze mi pomogłeś.
Użytkownicy przeglądający ten temat: 0
0 użytkowników, 0 gości, 0 anonimowych