У меня есть универсальная утилита, которой я пользуюсь с тех пор, как у меня был Турбо Паскаль, которая выполняет то, что вы просите:
function NumStringParts(SourceStr,Delimiter:String):Integer;
var
offset : integer;
curnum : integer;
begin
curnum := 1;
offset := 1;
while (offset <> 0) do
begin
Offset := Pos(Delimiter,SourceStr);
if Offset <> 0 then
begin
Inc(CurNum);
Delete(SourceStr,1,(Offset-1)+Length(Delimiter));
end;
end;
result := CurNum;
end;
function GetStringPart(SourceStr,Delimiter:String;Num:Integer):string;
var
offset : integer;
CurNum : integer;
CurPart : String;
begin
CurNum := 1;
Offset := 1;
While (CurNum <= Num) and (Offset <> 0) do
begin
Offset := Pos(Delimiter,SourceStr);
if Offset <> 0 then
begin
CurPart := Copy(SourceStr,1,Offset-1);
Delete(SourceStr,1,(Offset-1)+Length(Delimiter));
Inc(CurNum)
end
else
CurPart := SourceStr;
end;
if CurNum >= Num then
Result := CurPart
else
Result := '';
end;
Для вашего конкретного случая вы можете сделать что-то вроде следующего:
var
Data : tStringlist;
iX,iY,iCnt : integer;
begin
data := tStringlist.create;
try
data.loadFromFile( filename );
for iX := 0 to Data.Count-1 do
begin
iCnt := NumStringParts(Data.Strings[ix],#32);
for iY := 1 to iCnt do
ShowMessage( GetStringPart(Data.Strings[ix],#32,iY) );
end;
finally
data.free;
end;
end;
открывает файл filename
, а затем вызывает CallSomeFunction
для каждого слова (разделенного пробелами) в вашем текстовом файле.