Советы по Delphi

         

Импорт больших файлов с разделителями


Вот две функции, которые я использую почти во всех моих проектах. Пользоваться ею очень просто, например:

    var s: String; f: TextFile;
AssignFile(f, 'D:\INPUT.TXT');
Reset(f);
while not EOF(f) do
begin
ReadLn(s, f); ShowMessage(GetField(s, 1));  {Первое поле} ShowMessage(GetField(s, 6));  {Шестое поле} ShowMessage(GetField(s, 25)); {возвратит '', если нет 25 колонки...} end;

CloseFile(f);

{ ==== Данная функция возвращает поле из строки с разделителем. ==== }
function GetField(InpString: String; fieldpos: Integer): String;
var
c: Char; curpos, i: Integer; begin
curpos := 1; for i := 1 to fieldpos do begin result := ''; if curpos > Length(InpString) then Break; repeat c := InpString[curpos]; Inc(curpos, 1); if (c = '"') or (c = #13) or (c = #10) then c := ' '; if c <> ',' then result := result + c; until (c = ',') or (curpos > Length(InpString)) end; if (curpos > Length(InpString)) and (i < fieldpos) then result := ''; result := Trim(result); end;

{ ==== Данная функция удаляет у строки левые и правые пробелы. ==== }
function Trim(inp_str: String): String;
var
i: Integer; begin
for
i := 1 to Length(inp_str) do if inp_str[i] <> ' ' then Break; if i > 1 then Delete(inp_str, 1, i - 1); for i := Length(inp_str) downto 1 do if inp_str[i] <> ' ' then Break; if i < Length(inp_str) then Delete(inp_str, i + 1, Length(inp_str)); result := inp_str; if result = ' ' then result := ''; end;

[001691]



Содержание раздела