with TStringList.Create do begin LoadFromFile('E:\book2.txt'); DelimitedText:= Text; Delimiter := ','; ShowMessage(Strings[0]); Free; end;
procedure TForm1.Button1Click(Sender: TObject); var s,t:TStringList; i,j:integer; begin s:=TStringList.Create; t:=TStringList.Create; s.LoadFromFile('C:\1.txt'); for i:=0 to s.Count-1 do begin t.DelimitedText:=s.Strings[i]; t.Delimiter:=','; for j:=0 to t.Count-1 do memo1.Lines.Add(t.Strings[j]); end; s.Free; t.Free; ShowMessage('ok'); end;
procedure TForm1.Button1Click(Sender: TObject); var fFile : Textfile; sLine : string; sArray : Variant; i,j : Integer; begin AssignFile(fFile,'E:\book2.txt'); {$I-} Reset(fFile); {$I+} if IOResult=0 then begin sArray := VarArrayCreate([0,0],varVariant); while not Eof(fFile) do begin Readln(fFile,sLine); with TStringList.Create do begin DelimitedText:= sLine; Delimiter := ','; for i:=0 to Count-1 do begin j:=VarArrayHighBound(sArray,1); VarArrayRedim(sArray,j+1); sArray[j+1] := Strings[i]; ShowMessage(sArray[j+1]); end; Free; end; end; end; CloseFile(fFile); end;
function Compose(str: string; Num: Integer; fgf: string = '|'): string; //例子 //const testStr='//xxxx//yyyy//zzzz'; //result0 := Compose(testStr,'//',0);{4};{返回用分隔符分成的断数} //result1 := Compose(testStr,'//',2);{xxxx}; //result2 := Compose(testStr,'//',3);{yyyy}; //result3 := Compose(testStr,'//',4);{zzzz}; var TempI: Integer; ResultNum: Integer; begin ResultNum := 0; if Num = 0 then begin while True do begin TempI := Pos(fgf, Str); if TempI <> 0 then begin Inc(ResultNum); Str := Copy(Str, TempI + Length(fgf), Length(Str)); end else Break; end; Result := IntToStr(ResultNum + 1); end else begin for TempI := 2 to Num do begin ResultNum := Pos(fgf, str {Result}); if ResultNum = 0 then str := '' else str := Copy(str, ResultNum + Length(fgf), Length(str)); end; Result := Str; ResultNum := Pos(fgf, str); if ResultNum <> 0 then Result := Copy(str, 1, ResultNum - 1); end; end;每读取一行赋给tempstr 就用strtoint(compose(tempstr,0,',')) 就是数目 AssignFile(f,'你的文件全路名'); ReSet(f); While Not Eof(F) do Begin begin ReadLn(F,S); //S就是每行数据 i:=1; while i<strtoint(compose(S,0,','))+1 do begin tstr:=compose(S,i,',');//i=1时就等于'aa1',i=2时就等于'bb1' if i=strtoint(compose(S,0,',')) then begin tstr:=copy(tstr,0,length(tstr)-1); //去除最后那个';' end; memo1.lines.add(tstr); inc(i); end; end; End; CloseFile(F);
begin
LoadFromFile('E:\book2.txt');
DelimitedText:= Text;
Delimiter := ',';
ShowMessage(Strings[0]);
Free;
end;
var s,t:TStringList;
i,j:integer;
begin
s:=TStringList.Create;
t:=TStringList.Create;
s.LoadFromFile('C:\1.txt');
for i:=0 to s.Count-1 do
begin
t.DelimitedText:=s.Strings[i];
t.Delimiter:=',';
for j:=0 to t.Count-1 do
memo1.Lines.Add(t.Strings[j]);
end;
s.Free;
t.Free;
ShowMessage('ok');
end;
aa1,bb1,ccc1,ddddd1,eee1,ffff1;
aa2,bb2,ccc2,ddddd2,eee2,ffff2;
aa3,bb3,ccc3,ddddd3,eee3,ffff3;
aa4,bb4,ccc4,ddddd4,eee4,ffff4;memo内容:
aa1
bb1
ccc1
ddddd1
eee1
ffff1;
aa2
bb2
ccc2
ddddd2
eee2
ffff2;
aa3
bb3
ccc3
ddddd3
eee3
ffff3;
aa4
bb4
ccc4
ddddd4
eee4
ffff4;
var
fFile : Textfile;
sLine : string;
sArray : Variant;
i,j : Integer;
begin
AssignFile(fFile,'E:\book2.txt');
{$I-}
Reset(fFile);
{$I+}
if IOResult=0 then
begin
sArray := VarArrayCreate([0,0],varVariant);
while not Eof(fFile) do
begin
Readln(fFile,sLine);
with TStringList.Create do
begin
DelimitedText:= sLine;
Delimiter := ',';
for i:=0 to Count-1 do
begin
j:=VarArrayHighBound(sArray,1);
VarArrayRedim(sArray,j+1);
sArray[j+1] := Strings[i];
ShowMessage(sArray[j+1]);
end;
Free;
end;
end;
end;
CloseFile(fFile);
end;
则aa1,
bb1,
ccc1,
ddddd1,
eee1,
fff
f1;
他把空格也当分隔符了,我要求逗号之间的数据都存储在一个变量中。
s:TStringList;
s:=TStringList.create;
s.Delimiter := ',';
s.DelimitedText:=;
s.DelimitedText:=str;
for i:=0 to s.Count-1 do
memo1.lines.add(s[i]);
s.Free;
ShowMessage('ok');
写成这样:
aa1,bb1,ccc1,ddddd1,eee1,"fff f1;"如果文件格式不是你能控制的,
就不要用stringlist了,
自己写个函数,一个字符一个字符的判断
遍历一个字符串很好写的
//例子
//const testStr='//xxxx//yyyy//zzzz';
//result0 := Compose(testStr,'//',0);{4};{返回用分隔符分成的断数}
//result1 := Compose(testStr,'//',2);{xxxx};
//result2 := Compose(testStr,'//',3);{yyyy};
//result3 := Compose(testStr,'//',4);{zzzz};
var
TempI: Integer;
ResultNum: Integer;
begin
ResultNum := 0;
if Num = 0 then
begin
while True do
begin
TempI := Pos(fgf, Str);
if TempI <> 0 then
begin
Inc(ResultNum);
Str := Copy(Str, TempI + Length(fgf), Length(Str));
end
else
Break;
end;
Result := IntToStr(ResultNum + 1);
end
else
begin
for TempI := 2 to Num do
begin
ResultNum := Pos(fgf, str {Result});
if ResultNum = 0 then
str := ''
else
str := Copy(str, ResultNum + Length(fgf), Length(str));
end;
Result := Str;
ResultNum := Pos(fgf, str);
if ResultNum <> 0 then
Result := Copy(str, 1, ResultNum - 1);
end;
end;每读取一行赋给tempstr
就用strtoint(compose(tempstr,0,',')) 就是数目
AssignFile(f,'你的文件全路名');
ReSet(f);
While Not Eof(F) do Begin
begin
ReadLn(F,S); //S就是每行数据
i:=1;
while i<strtoint(compose(S,0,','))+1 do
begin
tstr:=compose(S,i,',');//i=1时就等于'aa1',i=2时就等于'bb1'
if i=strtoint(compose(S,0,',')) then
begin
tstr:=copy(tstr,0,length(tstr)-1); //去除最后那个';'
end;
memo1.lines.add(tstr);
inc(i);
end;
end;
End;
CloseFile(F);