Q&A

  • txt파일내용 구분자로 불러오고 표시하기 질문드립니다.
combobox1.items.loadfromfile('IP.txt');
원래 이렇게 해서 아이피 주소를 가지고 왔는데
사용자의 편리성을 위하여 접속아이피의 이름을 줄려고 합니다.

IP.txt의 내용이
test1=1.255.0.1
test2=100.25.0.2
test3=200.55.0.3
이렇게 있다고 할때 콤보박스에 보여주는 것은 test1이나 test2, test3이 되고
그걸 선택했을때 선택된 아이템의 "test1="를 버리고
아이피로만 입력되게 할려고 하는데요
이걸 할려면 구분자(=)로 가져와서 한다는건 알겠는데
어떻게 구분자를 사용해서 test1을 가져오고 아이피를 가져오는지 모르겠어요

찾아보니까 이렇게 하라고 되어 있는데요
str := 'aaa/bb/ccc/ddddd';
rstr := reversestring(str);
result := reversestring(copy(rstr, 1, pos('/', rstr)-1));
여기서 str에다가 IP.txt를 불러오는거랑
변수를 선언하는방법 좀 가르쳐주세요(변수를 선언하니깐 오류가 나서..)

아니면 다른 방법이라도.. 제발요~~
5  COMMENTS
  • Profile
    최용일 2009.01.05 22:00
    그냥 TStrings를 쓰세요.
    Name=Value 처럼 되어 있는 NameValuePair를 처리할 수 있도록 되어 있습니다.

    TStrings.Names = test1, test2, ...
    TStrings.Values = 1.255.0.1, 100.25.0.2


    procedure TfrmMain.Button1Click(Sender: TObject);
    const
    FileName = 'D:\Projects\Bin\list.txt';
    var
    List: TStrings;
    Index: Integer;
    begin
    List := TStringList.Create;
    try
    List.LoadFromFile(FileName);
    for Index := 0 to List.Count - 1 do
    Memo1.Lines.Add(List.Values[List.Names[Index]]);
    finally
    List.Free;
    end;
    end;
  • Profile
    조일현 2009.01.06 00:25
    가르쳐 주셔서 감사합니다.
    그런데 TStrings라는 컴포넌트가 있어야 하나요?
    저에게는 TStringGrid, TStringsValuesList 이거밖에 없군요

    또 TStrings사용법을 가르쳐 주세요
    윗부분에
    TStrings.Names = test1, test2, ...
    TStrings.Values = 1.255.0.1, 100.25.0.2
    이부분을 어떻게 하라는 건지 모르겠어요.
    IP.txt에 적어넣는건가요?

    그리고 Memo1 이걸 사용해야 하나요?? 다른건 사용하지 못하는 건가요??

    매번.. 제대로 이해하질 못해서 죄송합니다...
  • Profile
    최용일 2009.01.06 00:46
    TStrings, TStringList는 컴포넌트가 아니라 클래스입니다. Classes유닛에 선언되어 있구요...
    Names나 Values는 배열속성이고, 위와 같은 IP.txt파일을 읽어오면 아래와 같이 자동으로 값이 들어갑니다.

    List.Names[0] = 'test1'
    List.Names[1] = 'test2'
    ......
    List.Values[0] = '1.255.0.1'
    List.Values[1] = '100.25.0.2'
    ......

    Memo1은 값을 확인하는 차원에서 예제로 쓴것일 뿐이구요...

    자세한 것은 델파이 도움말을 보세요.
  • Profile
    조일현 2009.01.06 01:22
    Memo1.Lines.Add(List.Values[List.Names[Index]]);
    이 부분을 이렇게 바꿨더니
    ComboBox1.items.Add(List.Values[List.Names[index]]);
    컴파일은 되는데요

    읽을때 아이피만 읽는게 아니고 test1= 이것도 같이 읽어오네요

    IP.txt에 어떤형식으로 적어놔야 하나요??
    test1=100.100.100.1
    test2=100.100.100.2
    test3=100.100.100.3
    이렇게 적는게 맞나요??

    텍스트 파일에서는 test1=100.100.100.1
    이렇게 적어도 화면창에 보여주는건 test1이긴 한데요
    접속시 아이피로 접속되는게 아니라 test1으로 접속시도가 되서
    안됩니다.

    반대로 텍스트 파일에서는 그냥 아이피만 적어주고
    화면창에서는 test1=100.100.100.1 이렇게 보여주고
    접속할때는 아이피로만 접속가능하게 하는방법은 없나요??
  • Profile
    Elpira 2009.01.07 02:09


    const
    FileName = 'D:ip.txt';

    var
    IPList : TStrings;

    procedure TForm1.Button1Click(Sender: TObject);
    var
    iIndex : Integer;
    begin
    IPList.LoadFromFile( FileName );
    for iIndex := 0 to IPList.Count - 1 do
    begin
    ComboBox1.Items.Add( IPList.Names[ iIndex ] );
    Memo1.Lines.Add( IPList.Values[IPList.Names[iIndex]] );
    end;
    end;

    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
    IPList.Free;
    end;

    procedure TForm1.FormShow(Sender: TObject);
    begin
    IPList := TStringList.Create;
    end;



    최용일님 소스대로 하시면 잘됩니다...
    test1=xxx.xxx.xxx.1 형식이 맞습니다.
    콤보박스 추가시켜드렸습니다.