Sadece "STANS", "Payment, chk#1", ,1210.000
gibi bir dizeyi ,
tabanlı bir diziye bölmem gerekiyor. dizisi listesindeki sonuçDelphi içinde dize bölme
STANS
Payment, chk#1
1210.000
Sadece "STANS", "Payment, chk#1", ,1210.000
gibi bir dizeyi ,
tabanlı bir diziye bölmem gerekiyor. dizisi listesindeki sonuçDelphi içinde dize bölme
STANS
Payment, chk#1
1210.000
bir TStringList
oluşturun ve virgül StringList.CommaText
dize ayrılmış atamak olacaktır. Bu, girişinizi ayrıştırır ve bölünmüş dizeleri dize listesinin öğeleri olarak döndürür.
StringList.CommaText := '"STANS", "Payment, chk# 1", ,1210.000';
//StringList[0]='STANS'
//StringList[1]='Payment, chk# 1'
//etc.
Çok düzgün çalışmıyorsa, ağda geliştirilmiş sürümler de var. – mj2008
@ mj2008 Ayrıntılı bilgi verir misiniz lütfen? Bu kod verilen örnekte iyi çalışıyor. Bir cevabı çıkarırsanız, bazı kanıtlar sunmak daha iyidir. Eğer kanıtınız varsa o zaman çok mutlu olurum. –
Seni destekledim ve doğru cevap olduğunu düşünüyorum. Seni "debunk" etmek için dışarı çıkmadım! Magenta Systems'tan bazı alan geliştirmeleri yapan bir TStringCSVList'im var, ancak 2000'den beri mevcut Delphi uygulaması daha iyi. İyi bir CSV için, Delphi kutunun dışındadır. Tehlikeli CSV için, orada benzer şeyler var. – mj2008
Ben Bu bir cevap değil ama henüz bir yorum yapamaz bu fonksiyonu yazdım ve Delphi 2007
function ParseCSV(const S: string; ADelimiter: Char = ','; AQuoteChar: Char = '"'): TStrings;
type
TState = (sNone, sBegin, sEnd);
var
I: Integer;
state: TState;
token: string;
procedure AddToResult;
begin
if (token <> '') and (token[1] = AQuoteChar) then
begin
Delete(token, 1, 1);
Delete(token, Length(token), 1);
end;
Result.Add(token);
token := '';
end;
begin
Result := TstringList.Create;
state := sNone;
token := '';
I := 1;
while I <= Length(S) do
begin
case state of
sNone:
begin
if S[I] = ADelimiter then
begin
token := '';
AddToResult;
Inc(I);
Continue;
end;
state := sBegin;
end;
sBegin:
begin
if S[I] = ADelimiter then
if (token <> '') and (token[1] <> AQuoteChar) then
begin
state := sEnd;
Continue;
end;
if S[I] = AQuoteChar then
if (I = Length(S)) or (S[I + 1] = ADelimiter) then
state := sEnd;
end;
sEnd:
begin
state := sNone;
AddToResult;
Inc(I);
Continue;
end;
end;
token := token + S[I];
Inc(I);
end;
if token <> '' then
AddToResult;
if S[Length(S)] = ADelimiter then
AddToResult
end;
benim için mükemmel çalışıyor ... ben de aynısını yapabilirsiniz nasıl ama Bunun yerine, "," var ";" ... Teşekkür ederim – azrael11