Social Icons

Pages

Membuat Parsing String dengan Delphi

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.
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;
 

0 comments:

Post a Comment

 
Blogger Templates