csvbom.pp 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. program csvbom;
  2. {$APPTYPE Console}
  3. {$mode objfpc}{$H+}
  4. uses
  5. sysutils, classes, dateutils, csvreadwrite;
  6. type
  7. TDataRec = record
  8. FDate: TDate;
  9. FNumber: Integer;
  10. FText: String;
  11. end;
  12. const
  13. FILENAME = 'databom.txt';
  14. var
  15. parser: TCSVParser;
  16. stream: TFileStream;
  17. data: array of TDataRec;
  18. s: String;
  19. i: Integer;
  20. begin
  21. parser := TCSVParser.Create;
  22. try
  23. parser.Delimiter := ',';
  24. parser.DetectBOM := true; // uncomment for running with patched version
  25. stream := TFileStream.Create(FILENAME, fmOpenRead);
  26. parser.SetSource(stream);
  27. SetLength(data, 0);
  28. while parser.ParseNextCell do begin
  29. if parser.CurrentRow > High(data) then
  30. SetLength(data, parser.CurrentRow + 1);
  31. s := parser.CurrentCellText;
  32. case parser.CurrentCol of
  33. 0: data[High(data)].FDate := ScanDateTime('yyyy-mm-dd', s);
  34. 1: data[High(data)].FNumber := StrToInt(s);
  35. 2: data[High(data)].FText := s;
  36. end;
  37. end;
  38. for i:=0 to High(data) do
  39. WriteLn(DateToStr(data[i].FDate), '; ', data[i].FNumber, '; ', data[i].FText);
  40. Writeln('Press enter to quit program');
  41. Readln;
  42. finally
  43. stream.Free;
  44. parser.Free;
  45. end;
  46. end.