Импорт большого CSV файла

Материал из DRKB

Импорт большого CSV файла[править | править код]

var
  s: string;
  f: TextFile;
begin
  AssignFile(f, 'D:\\INPUT.TXT');
  Reset(f);
  while not EOF(f) do
  begin
    ReadLn(s, f);
    ShowMessage(GetField(s, 1)); {The first field\}
    ShowMessage(GetField(s, 6)); {The sixth field\}
    ShowMessage(GetField(s, 25)); {will return '' if no 25 column...\}
  end;
  CloseFile(f);
end;
{ ==== This function will return a field from a delimited string. ==== \}

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;

{ ==== This function will trim a string removing spaces etc. ==== \}

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;


Source: Взято с http://delphiworld.narod.ru
ID: 02969