4

文字列とそれらを置き換える値のリストがあります。それらを次のようなリストに結合しようとしている'O'='0',' .'='.', ...ので、簡単に編集して、置換のペアを追加して作成できます。

今、私が考えることができる最良の方法は次のとおりです。

var
  ListaLimpeza : TStringList;
begin
  ListaLimpeza := TStringList.Create;

  ListaLimpeza.Delimiter := '|';
  ListaLimpeza.QuoteChar := '"';
  ListaLimpeza.DelimitedText := 'O=0 | " .=."';

  ShowMessage('1o Valor = '+ListaLimpeza.Names[1]+' e 2o Valor = '+ListaLimpeza.ValueFromIndex[1]);

これは機能しますが、ビジュアルには適していません。名前と値を割り当てるために機能するように ( ) のように ( )' .'のように ( ) のように (これは SPACE 文字に対して非常に視覚的です)、前の文字列 ( ex ) をそのようにコーディングすることはできません。 TStringList で。" .=

4

1 に答える 1

5

Windows INI ファイルのスタイルでは、デフォルトで と を ,で区切る必要がありNamesます。AFAICT がそのセパレーターを変更する方法はありません。@SirRufo がコメントで示しているように (そして、私はこれまで気付かなかった)、プロパティを使用して変更できます。Values=TStringList.NameValueSeparator

これにより、Delphi があなたの 内にあると考えているもののアイデアが得られますがTStringList、それはあなたが考えているものではありません。

procedure TForm1.FormCreate(Sender: TObject);
var
  SL: TStringList;
  Temp: string;
  i: Integer;
begin
  SL := TStringList.Create;
  SL.Delimiter := '|';
  SL.QuoteChar := '"';
  SL.StrictDelimiter := True;
  SL.DelimitedText := 'O=0 | ! .!=!.!';
  Temp := 'Count: ' + IntToStr(SL.Count) + #13;
  for i := 0 to SL.Count - 1 do
    Temp := Temp + Format('Name: %s Value: %s'#13, 
              [SL.Names[i], SL.ValueFromIndex[i]]);
  ShowMessage(Temp);
end;

これにより、次の出力が生成されます。

上記のコードからの ShowMessage 出力の例

TStringListNames/Values は、おそらく必要なことを実行しないでしょう。あなたの実際の目標が何であるかは明らかではありませんが、そのファイルの単純なリストと単純text|replacementな解析を含む単純なテキストファイルが機能し、そのファイルTStringListから簡単に読み書きできるように見えますが、わかりません自分で行う以外に、解析を簡単に行う方法。ペアを解析するときに、配列を使用してペアを格納できます。

type
  TReplacePair = record
    TextValue: string;
    ReplaceValue: string;
  end;

  TReplacePairs = array of TReplacePair;

function GetReplacementPairs: TReplacePairs;
var
  ConfigInfo: TStringList;
  i, Split: Integer;
begin
  ConfigInfo := TStringList.Create;
  try
    ConfigInfo.LoadFromFile('ReplacementPairs.txt');
    SetLength(Result, ConfigInfo.Count);
    for i := 0 to ConfigInfo.Count - 1 do
    begin
      Split := Pos('|`, ConfigInfo[i];
      Result[i].TextValue := Copy(ConfigInfo[i], 1, Split - 1);
      Result[i].ReplaceValue := Copy(ConfigInfo[i], Split + 1, MaxInt);
    end;
  finally
    ConfigInfo.Free;
  end;
end;

次に、置換ペアを編集/追加/削除するために必要なコントロールを入力し、読み取り操作を逆にしてそれらを書き戻して保存することができます。

于 2013-06-04T02:36:10.017 に答える