Program ktory otwiera plik txt i liczy ilosc wystapienia kazdej z liter ..
Napisze ktoś takie coś ? . (Pascalu)
Program ktory otwiera plik txt i liczy ilosc wystapienia kazdej z liter ..
Napisze ktoś takie coś ? . (Pascalu)
w delphi byłoby tak
var
text : string;
ile, i : integer;
begin
memo1.Lines.LoadFromFile('C:\plik.txt');
text := memo1.lines.text;
ile:=0;
for i:=1 to length(text) do if text[i]='z' then ile:=ile+1;
showmessage(inttostr(ile));
end;
Nie wiem czy działa bo piszę z głowy bez Delphi...
var
i, k, licznik : Integer;
Buff: TStringList; // bufor
begin
Buff := TStringList.Create;
Buff.Free;
for i := ORD('a') to ORD('z') do // wszystkie małe litery
begin
// rozpoczęcie zliczania kolejnej litery
Buff.LoadFromFile('C:/.....'); // załadowanie bufora
for k := 1 to Length(Buff.Text) do
begin
if Buff.Text[k] = CHR(i) then licznik := licznik + 1;
end;
ShowMessage('Ilosc literek ' +string(CHR(i)) +' : ' + InToStr(licznik));
end;
A w Pascalu ? ;]]] bo jutro sprawdzian mam ..
var
i, k, licznik : Integer;
t: TextFile;
ch: char;
begin
Assign(t, 'C:\plik.txt');
Reset(t);
for i := ORD('a') to ORD('z') do // wszystkie małe litery
begin
licznik := 0;
// rozpoczęcie zliczania kolejnej litery
repeat
Read(t, ch);
if ch = CHR(i) then licznik := licznik + 1;
until EOF(t);
Reset(t);
Writeln('Ilosc literek ' +CHR(i) +' : ' + IntToStr(licznik));
end;
Close(t);
end;
type littab=packed array[char]of dword; // pascal : of longint;
procedure count(filename:string;var literki:littab);
const bufsize=16384;
var
f:file;
buf:packed array[0..bufsize-1]of char; // packed jest difoltowo dla pascala od wersji 5.5 do 7, ale może być.
l:dword; // tpascal: longint
i:word;
begin
fillchar(literki,1024,0);
assignfile(f,filename); // assign(f) dla tp
reset(f,1);
l:=filesize(f);
while longbool(l)do // while(l>0)do dla pascala
begin
i:=bufsize;
if(l<i)then i:=l;
blockread(f,buf,i);
dec(l,i);
while wordbool(i)do // while(i>0)do pascal
begin
dec(i);
inc(literki[buf[i]]);
end;
end;
closefile(f); // close(f)- pascal
end;
var
a:littab;
i:char;
begin
filemode:=0; // readonly bo msdos.sys jest readonly
count('c:\msdos.sys',a);
for i:=^@ to #255 do
if(i in[#65..#90,#97..#122])then
writeln('znak',i,' tyle razy : ',a[i])
end.
// jeszcze jeden się o to zapyta a na prawdę umieszczę to w faq jako podstawowy algorytm
// umieść - będę mógł kasować więcej postów. [boks] - ŁF