Допустим, нам интересно прочитать файл, предоставленный аргументом командной строки после переключателя, содержащий веса подстановки для символов.
program WeightFileRead;
uses SysUtils, StrUtils;
var
MyFile : TextFile;
FirstChar, SecondChar, DummyChar : Char;
Weight : Double;
begin
if GetCmdLineArg ('editweights', StdSwitchChars) = ''
then begin
WriteLn ('Syntax: WeightFileRead -editweights filename'); exit
end;
AssignFile (MyFile, GetCmdLineArg ('editweights', StdSwitchChars));
Reset (MyFile);
try
while not EOF (MyFile) do
begin
ReadLn (MyFile, FirstChar, DummyChar, SecondChar, Weight);
WriteLn ('A: ', FirstChar, '; B: ', SecondChar, '; W: ', Weight:0:1);
end
finally
CloseFile (MyFile)
end
end.
В более общем случае, когда первые две записи могут быть более длинными строками, мы можем использовать ExtractWord
, который находит n
слово, разделенное пробелами, в строке (или ExtractSubstr
, который обрабатывает несколько пробелов вместе как вводит пустое слово) и преобразует третье в число.
program WeightFileRead2;
uses SysUtils, StrUtils;
var
MyFile : TextFile;
FileLine : String;
begin
if GetCmdLineArg ('editweights', StdSwitchChars) = ''
then begin
WriteLn ('Syntax: WeightFileRead -editweights filename'); exit
end;
AssignFile (MyFile, GetCmdLineArg ('editweights', StdSwitchChars));
Reset (MyFile);
try
while not EOF (MyFile) do
begin
ReadLn (MyFile, FileLine);
WriteLn ('A: ', ExtractWord (1, FileLine, [' ']),
'; B: ', ExtractWord (2, FileLine, [' ']),
'; W: ', StrToFloat (ExtractWord (3, FileLine, [' '])):0:1);
end
finally
CloseFile (MyFile)
end
end.
Заметьте, я использую [' ']
вместо StdWordDelims
, так как не хочу. или, чтобы быть разделителем слов.