БОЛЬШОЙ FAQ ПО 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;
 




<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ



Материалы находятся на сайте https://exelab.ru/pro/



Видеокурс ВЗЛОМ