iniファイルがら読み出した文字列を代入するには?


いつも  2008-07-04 01:15:58  No: 31138

いつも勉強させてもらっています。
FormにEdit1、Edit2があります。
また、iniファイルには、
123,abc
234,defg
312,opqrstu
987,ohayou
のように設定しています。
Edit1に123と入力したら、Edit2にabc
Edit1に987と入力したら、Edit2にohayou
というふうに、自動入力したいのですが。

簡単な質問かもしれませんが、どうぞ宜しくお願いします。


igy  2008-07-04 01:45:54  No: 31139

Edit1の OnChange イベントで、Edit1のTextプロパティ に関して

・テキストファイル(CSVファイル)を読み込み、該当する行(1列目と一致するデータ)を検索
・見つかった場合、その行の2列目の内容をEdit2のTextプロパティに格納

するのはどうですか?


Manbon  2008-07-04 01:57:32  No: 31140

こういう質問はどちらかというと、Delphiというより、
プログラミング(アルゴリズム?HowTo?)寄りですよね。
こういうのもアリですか?
(今まで、この手のものは遠慮してきたもので・・・)


スコピョン・キング  2008-07-04 02:25:34  No: 31141

TStringListにはValuesを使った連想配列機能がある。
それを使う。に一票


スコピョン・キング  2008-07-04 02:27:29  No: 31142

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q127378997

ここに、まんまの解があったゾ。


もにゃ  2008-07-04 04:52:58  No: 31143

Manbonさんへ
僕はDelphiを使えばなんでもOKだと解釈しています。
もちろん、人によりけりですがね。
もちろん、ソースはDelphi言語になりますが。

いつもさんへ
こんな感じでどうですか?
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
  private
    { Private 宣言 }
    IniList:TStringList;
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
//部分一致の場合
function FindStringA(SearchStr:String; var aList:TStringList):String;
var i:Integer;
begin
  Result:='';
  for i:=0 to aList.Count-1 do
  begin
    if AnsiPos(SearchStr,aList.Strings[i])=1 then
    begin
      Result:= Copy(aList.Strings[i],
                    AnsiPos(',',aList.Strings[i])+1,
                    Length(aList.Strings[i])
                    );
      exit;
    end;
  end;
end;

//完全一致
function FindStringB(SearchStr:String; var aList:TStringList):String;
var
  i,p:Integer;
  strA,strB:String;
begin
  Result:='';
  for i:=0 to aList.Count-1 do
  begin
    p:= AnsiPos(',',aList.Strings[i]);
    strA := Copy(aList.Strings[i],1,p-1);
    strB := Copy(aList.Strings[i],p+1,Length(aList.Strings[i]));
    if strA=SearchStr then
    begin
      Result:= strB;
      exit;
    end;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  IniList:=TStringList.Create;
  //iniファイルをTStringListに読み込む
  IniList.LoadFromFile(ExtractFilePath(Application.ExeName)+'data.ini');
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  //解放
  IniList.Free;
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
  //左方検索の場合
  Edit2.Text:=FindStringA(Edit1.Text,iniList);
  //完全一致の場合
  //Edit2.Text:=FindStringB(Edit1.Text,iniList);
end;

end.


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加