문자열 목록 (예 : 쉼표로 구분 된 키와 값으로 자동 대체에 사용할 수 있음)이있는 텍스트 파일을 갖고 각 키 - 값 쌍을 TDictionary<string, string>
에 저장하고 싶습니다. 사전을 어떻게 채울 수 있습니까?쉼표로 구분 된 문자열 쌍 목록에서 TDictay를 채우려면 어떻게해야합니까?
답변
만 (세 가지 핵심 단어 "사과"와 "사과"와 "McIntoshes을"싫어 "매킨토시"으로 전환 될 것이다) 일대일 키 - 값과 관련이있는 경우 - 다음 아마도 simpliest 방법 중 하나는 대소 문자 구분이 필요하거나 파일보다 대문자을
- 는 U 정확히
Key=Value
라인,하지Key,Value
- U의 파일을 만드는 것이 제공, TStringList를를 사용하는 것입니다.
그런 다음 u는 당신이 IniFiles를 단위의 THashedStringList를 사용할 수있는 물건을 조금 속도를 높이기 위해
http://docwiki.embarcadero.com/Libraries/XE3/en/System.Classes.TStrings.Values를 사용합니다. 또한 JCLX 단위로 JCL에서도 비슷한 내용이 있습니다.
이것은 멋진 접근 방법이지만 값에 대해 하나 이상의 키를 갖습니다. 귀하의 제안에 감사드립니다! – user1817376
@ user1817376 'awesome'이지만 질문에 대답하지 않은 이유는 무엇입니까? IMHO David의 대답은 당신의 질문에 완벽하게 부합하며 받아 들여 져야합니다. BTW는 TStringList와 함께 TDictionary와 같은 값을 가진 많은 키를 가질 수 있습니다. 유일한 키는 고유해야합니다 –
@SirRufo에 동의합니다. 대답이 굉장 할 때 - 그것을 upvoting하여 인정됩니다. 그러나 답이 맞는지 아닌지는 별개의 문제입니다. 나는이 대답이 맥락에서 벗어난다면 당신은 1을 더 잘 수행 할 것이라고 생각한다 : 요구 사항을 명시 적으로 철자함으로써 질문을 수정하면 내 대답이 부정확하다. 2 : 귀하의 상황에 실제로 적용되는 대답을 수락하십시오. –
귀하의 의견을 통해 쉼표로 분리 된 몇 가지 키 값 쌍을 사전으로 추출하는 방법을 알고 싶습니다. 여기에 기본 예제 :
procedure PopulateKeyValueDict(Strings: TStrings;
Dict: TDictionary<string, string>);
var
CommaPos: Integer;
Line: string;
Key, Value: string;
begin
for Line in Strings do
begin
CommaPos := Pos(',', Line);
if CommaPos=0 then
raise Exception.CreateFmt(
'Could find comma separated key/value pair in ''%s''',
[Line]
);
Key := Copy(Line, 1, CommaPos-1);
Value := Copy(Line, CommaPos+1, MaxInt);
Dict.Add(Key, Value);
end;
end;
당신은 너무에 대한 오류 검사 등을 추가 할 가능성이 있습니다,하지만 난 당신이 이미 작업을 수행하는 방법을 알고 있으리라 믿고있어. 이 예제는 첫 번째 쉼표에 선을 분할하는 방법과 사전을 채우는 방법을 보여줍니다.
파일을 사용하려면 TStrings
개체로 파일을 전송해야합니다. 즉 일상의 :
var
Strings: TStringList;
....
Strings := TStringList.Create;
try
Strings.LoadFromFile(FileName);
PopulateKeyValueDict(Strings, Dict);
finally
Strings.Free;
end;
대체 텍스트로 어떻게 사용합니까? – user1817376
여기에 한 번에 한 가지 질문 만 남았습니다. 하지만 사전을 반복해야하고 각 쌍마다 문자열을 바꿔야합니다. 이를 위해'StringReplace' 함수를 사용할 수 있습니다. –
아 ... 고마워요! 나는 당신의 웹 사이트에 갔다. 그리고 나는 실망했다! – user1817376
값을 꺼내는 중 – user1817376
http://docwiki.embarcadero.com/Libraries/XE3/en/System.Generics.Collections.TDictionary.TryGetValue –