掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
頭文字のみを判断するには? (ID:5837)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
Halbow です。 具体的にやってみましょう。以下のようなテキストデータをメモ帳かテキストエディタにコピペして、'c:\テスト住所.cvs' として保存してください。 さとうくにお,佐藤邦夫,佐藤住所,佐藤郵便番号,佐藤電話 あいだいちろう,愛田一郎,東京都杉並区XXXX,112-9876,03-4499-3333 えのきたけお,榎木武雄,榎木住所,榎木郵便番号,榎木電話 すずきえみ,鈴木絵美,鈴木住所,鈴木郵便番号,鈴木電話 かめだじろう,亀田次郎,亀田住所,亀田郵便番号,亀田電話 さとうさちこ,佐藤佐知子,佐藤住所,佐藤郵便番号,佐藤電話 たなかかくえい,田中角栄,田中住所,田中郵便番号,田中電話 しもだくみこ,下田久美子,下田住所,下田郵便番号,下田電話 そして、Form1 にやや幅広の Memo1 と ListView1 と Button1 を置いて以下のようにします。 type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; ListView1: TListView; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private 宣言 } public Data:TStringList; procedure DispALine(s:string); end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); var NewColumn:TListColumn; begin ListView1.ViewStyle := vsReport; NewColumn := ListView1.Columns.Add; NewColumn.Width := 100; NewColumn.Caption := '名 前'; NewColumn := ListView1.Columns.Add; NewColumn.Width := 100; NewColumn.Caption := 'よみがな'; NewColumn := ListView1.Columns.Add; NewColumn.Width := 100; NewColumn.Caption := '住 所'; NewColumn := ListView1.Columns.Add; NewColumn.Width := 100; NewColumn.Caption := '郵便番号'; NewColumn := ListView1.Columns.Add; NewColumn.Width := 100; NewColumn.Caption := '電話番号'; Data := TStringList.Create; Data.LoadFromFile('c:\テスト住所.cvs'); Data.Sort; // ソートしておく Memo1.Lines.Assign(Data); end; procedure TForm1.FormDestroy(Sender: TObject); begin Data.Free; end; function GetHiaraganaCode(Hiragana:string):Word; begin result := Ord(Hiragana[1]) shl 8 + Ord(Hiragana[2]); end; procedure TForm1.DispALine(s: string); var SL:TStringList; LI:TListItem; begin SL := TStringList.Create; try SL.CommaText := s; LI := ListView1.Items.Add; LI.Caption := SL[1]; LI.SubItems.Add(SL[0]); LI.SubItems.Add(SL[2]); LI.SubItems.Add(SL[3]); LI.SubItems.Add(SL[4]); finally SL.Free; end; end; procedure TForm1.Button1Click(Sender: TObject); var i:integer; Code:Word; begin // Shift-JIS の文字コード サ行 → 'さ' = $82B3 〜 'ぞ' = $82BC ListView1.Items.Clear; for i := 0 to Data.Count-1 do begin Code := GetHiaraganaCode(Copy(Data[i],1,2)); if (Code>=$82B3) and (Code<=$82BC) then DispALine(Data[i]); end; end; end. これを実行すると、Memo1 に先ほど保存したデータが表示されます。次に、Button1 を押すと、ListView1 に サ行 だけのデータが表示されます。 > ただ、そのアドレス帳では、「あ・か・さ・た・・・」順で > ListView1・Listview2・・・ といったように名前の頭文字を判断して > ページをかえようと思っているのですが、どういう風にすると > うまく判断して登録できるようになるでしょうか・・・? データは表示とは分離して管理します。上の例では、データは Data という TStringList で保持しています。今回のような場合は、TListView は一つだけにして、TTabControl を使って、ア行、カ行・・・としてタブを選択したとき、上の例の Button1Click と同じような論理で ListView にデータを表示するとよいです。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.