Parsing string ke dalam kata-kata adalah masalah umum. Begitu umum bahwa saya memutuskan untuk memasukkan subroutine GetNextWord sampel di sini. Contoh program membaca file teks dan kata-kata penting. Saya pikir kode ini cukup jelas diri jadi saya akan tetap diskusi ini singkat.
Fungsi GetNextWord mengambil seutas tali dan ekstrak kata pertama. Jika kata ditemukan hasil fungsi adalah benar, dinyatakan palsu. Kata kembali akan dihapus dari string input, sehingga perlu untuk memindahkan input teks ke string sementara pertama (kecuali jika Anda memiliki tidak lebih berguna untuk teks asli). Sebuah konstanta, delims, mendefinisikan set karakter mana kata-kata yang terpisah.
Fungsi GetNextWord mengambil seutas tali dan ekstrak kata pertama. Jika kata ditemukan hasil fungsi adalah benar, dinyatakan palsu. Kata kembali akan dihapus dari string input, sehingga perlu untuk memindahkan input teks ke string sementara pertama (kecuali jika Anda memiliki tidak lebih berguna untuk teks asli). Sebuah konstanta, delims, mendefinisikan set karakter mana kata-kata yang terpisah.
Program ini juga merupakan contoh memasukkan obyek bersama dengan kata menjadi komponen TStrings Daftar Produk dalam komponen TListBox menampilkan kata-kata dan setiap entri juga berisi objek thitung. Thitung masing-masing berisi satu bidang, hitungan jumlah kemunculan kata. Untuk setiap kata kita dapat menggunakan metode indexOf untuk menentukan apakah kata tersebut sudah dalam daftar. Jika ya, kita hanya akan menambahkan satu ke lapangan hitungan dalam objek thitung. Jika kata tersebut tidak ada dalam daftar, kita akan membuat objek thitung baru, setel field hitungan ke 1 dan menambahkan kedua kata dan objek untuk Produk. Setelah semua kata telah dimuat, kita dapat menjalankan melalui daftar dan menambahkan representasi string dari hitungan ke kata yang ditampilkan. Kami juga akan membebaskan benda-benda seperti yang kita lakukan ini karena kita sudah selesai dengan mereka.
coba cource berikut ini :
function getnextword(var s,w:string):boolean;
{Note that this a "destructive" getword.
The first word of the input string s is returned in w and
the word is deleted from the input string}
const
delims:set of char = [' ','.',',','(',')',':',';','"'];
var
i:integer;
begin
w:='';
if length(s)>0 then
begin
i:=1;
while (i<length(s)) and (s[i] in delims) do inc(i);
delete(s,1,i-1);
i:=1;
while (i<=length(s)) and (not (s[i] in delims)) do inc(i);
w:=copy(s,1,i-1);
delete(s,1,i);
end;
result := (length(w) >0);
end;
type
TCount=class(TObject)
count:integer;
end;
procedure TForm1.countwords;
var
i, index:integer;
s,w:string;
c:TCount;
begin
with memo1 do
for i:= 0 to memo1.lines.count-1 do
begin
s:=lines[i];
while getnextword(s,w) do
begin
w:=lowercase(w);
Index:= wordlist.Items.Indexof(w);
with wordlist.items do
if index>=0
then TCount(objects[index]).count:=TCount(objects[index]).count+1
else
begin
c:=TCount.create;
c.count:=1;
addobject(w,c);
end;
end;
application.processmessages;
end;
for i:= 0 to wordlist.items.count-1 do
with wordlist.Items do
begin
strings[i]:= strings[i] + ' (' + inttostr(TCount(objects[i]).count)+')';
objects[i].free;
end
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
If opendialog1.execute then
begin
wordlist.clear;
memo1.lines.loadfromfile(opendialog1.FileName);
caption:='File: '+opendialog1.filename;
countwords;
end
end;
{Note that this a "destructive" getword.
The first word of the input string s is returned in w and
the word is deleted from the input string}
const
delims:set of char = [' ','.',',','(',')',':',';','"'];
var
i:integer;
begin
w:='';
if length(s)>0 then
begin
i:=1;
while (i<length(s)) and (s[i] in delims) do inc(i);
delete(s,1,i-1);
i:=1;
while (i<=length(s)) and (not (s[i] in delims)) do inc(i);
w:=copy(s,1,i-1);
delete(s,1,i);
end;
result := (length(w) >0);
end;
type
TCount=class(TObject)
count:integer;
end;
procedure TForm1.countwords;
var
i, index:integer;
s,w:string;
c:TCount;
begin
with memo1 do
for i:= 0 to memo1.lines.count-1 do
begin
s:=lines[i];
while getnextword(s,w) do
begin
w:=lowercase(w);
Index:= wordlist.Items.Indexof(w);
with wordlist.items do
if index>=0
then TCount(objects[index]).count:=TCount(objects[index]).count+1
else
begin
c:=TCount.create;
c.count:=1;
addobject(w,c);
end;
end;
application.processmessages;
end;
for i:= 0 to wordlist.items.count-1 do
with wordlist.Items do
begin
strings[i]:= strings[i] + ' (' + inttostr(TCount(objects[i]).count)+')';
objects[i].free;
end
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
If opendialog1.execute then
begin
wordlist.clear;
memo1.lines.loadfromfile(opendialog1.FileName);
caption:='File: '+opendialog1.filename;
countwords;
end
end;
0 comments:
Post a Comment