-1

.script ファイルからパラメータをロードする新しい .txt ファイルを作成したいと考えています。ルートでうまく機能します。.script ファイルはルート ディレクトリにあります。結果は次のとおりです。

  1. 192.121.2.2 ログイン ルーシー パスワード 赤
  2. 192.321.2.1 ログイン スティーブ パスワード アップル

.

  if FindFirst('*.*', faAnyFile, Search) = 0 then
  begin
    while FindNext(Search) = 0 do
    begin
      if FileExists(Search.Name) then
      begin
        if pos('.txt', Search.Name) <> 0 then
        begin
          Assignfile(txtfile, Search.Name);
          Erase(txtfile);
        end;
      end;
    end;
  end;
  findclose(Search);

  if FindFirst('*.*', faAnyFile, Search) = 0 then
  begin
    while FindNext(Search) = 0 do
    begin
      if FileExists(Search) then
      begin
        if pos('.script', Search.Name) <> 0 then
        begin
          data_file := TStringList.Create;
          data_file.LoadFromFile(Search.Name);
          txtdata := data_file.Strings[1].+ 'login' + data_file.Strings[2] +
            'password' + data_file.Strings[3];
          txtfile := TStringList.Create;
          if FileExists('.txt') then
          begin
            txtfile.LoadFromFile('.txt');
          end;
          txtfile.Add(txtdata);
          txtfile.SaveToFile('.txt');
        end;
      end;
    end;
  end;

  findclose(Search);

しかし、C:\Script\Files を追加したい場合、使用するコードが間違っています。何が問題なのでしょうか? 助けてください!

  if FindFirst('c:\Script\Files\*.*', faAnyFile, Search) = 0 then
  begin
    while FindNext(Search) = 0 do
    begin
      if FileExists(Search.Name) then
      begin
        if pos('c:\Script\Files\.txt', Search.Name) <> 0 then
        begin
          Assignfile(txtfile, Search.Name);
          Erase(txtfile);
        end;
      end;
    end;
  end;
  findclose(Search);

  if FindFirst('*.*', faAnyFile, Search) = 0 then
  begin
    while FindNext(Search) = 0 do
    begin
      if FileExists(Search) then
      begin
        if pos('.script', Search.Name) <> 0 then
        begin
          data_file := TStringList.Create;
          data_file.LoadFromFile(Search.Name);
          txtdata := data_file.Strings[1] + 'login' + data_file.Strings[2] +
            'password' + data_file.Strings[3];
          txtfile := TStringList.Create;
          if FileExists('c:\Script\Files\.txt') then
          begin
            txtfile.LoadFromFile('c:\Script\Files\.txt');
          end;
          txtfile.Add(txtdata);
          txtfile.SaveToFile('c:\Script\Files\.txt');
        end;
      end;
    end;
  end;

  findclose(Search);

結果は次のとおりです。

  1. 192.121.2.2 ログイン ルーシー パスワード 赤
  2. 192.121.2.2 ログイン ルーシー パスワード 赤
  3. 192.321.2.1 ログイン スティーブ パスワード アップル

1 番目のアイテムは 2 回表示されます。

4

1 に答える 1

2

コードに非常に多くのロジック バグがあります。代わりにこれを試してください:

if FindFirst('c:\Script\Files\*.txt',faAnyFile,Search) = 0 then
begin
  repeat
    DeleteFile('c:\Script\Files\' + Search.Name);
  until FindNext(Search) <> 0;
  FindClose(Search);
end;

txtfile := TStringList.Create;
try
  if FindFirst(PathToScriptFiles + '*.script',faAnyFile,Search) = 0 then
  begin
    repeat
      data_file := TStringList.Create;
      try
        data_file.LoadFromFile(PathToScriptFiles + Search.Name);
        txtdata := data_file.Strings[1] + ' login ' + data_file.Strings[2] + ' password ' + data_file.Strings[3];
        txtfile.Add(txtdata);
      finally
        data_file.Free;
      end;
    until FindNext(Search) <> 0;
    FindClose(Search);
  end;
  txtfile.SaveToFile('c:\Script\Files\.txt');
finally
  txtfile.Free;
end;
于 2012-11-12T19:29:38.590 に答える