Names
и Values
по умолчанию должны быть разделены =
в стиле INI-файлов Windows. Невозможно изменить этот разделитель AFAICT. Как указывает @SirRufo в комментарии (и чего я никогда не замечал), вы можете изменить это, используя свойство 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;
Это производит этот вывод:
TStringList
Names/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;
Затем вы можете заполнить любые элементы управления, необходимые для редактирования/добавления/удаления пар замены, и просто отменить операцию чтения, чтобы записать их обратно для сохранения.
person
Ken White
schedule
04.06.2013