summaryrefslogtreecommitdiff
path: root/packages/fcl-base/examples/csvbom.pp
blob: a16adf582afaa83434ce07338bcd34988cda431a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
program csvbom;

{$APPTYPE Console}
{$mode objfpc}{$H+}

uses
  sysutils, classes, dateutils, csvreadwrite;

type
  TDataRec = record
    FDate: TDate;
    FNumber: Integer;
    FText: String;
  end;

const
  FILENAME = 'databom.txt';

var
  parser: TCSVParser;
  stream: TFileStream;
  data: array of TDataRec;
  s: String;
  i: Integer;
begin
  parser := TCSVParser.Create;
  try
    parser.Delimiter := ',';
    parser.DetectBOM := true;     // uncomment for running with patched version
    stream := TFileStream.Create(FILENAME, fmOpenRead);
    parser.SetSource(stream);
    SetLength(data, 0);
    while parser.ParseNextCell do begin
      if parser.CurrentRow > High(data) then
        SetLength(data, parser.CurrentRow + 1);
      s := parser.CurrentCellText;
      case parser.CurrentCol of
        0: data[High(data)].FDate := ScanDateTime('yyyy-mm-dd', s);
        1: data[High(data)].FNumber := StrToInt(s);
        2: data[High(data)].FText := s;
      end;
    end;

    for i:=0 to High(data) do
      WriteLn(DateToStr(data[i].FDate), '; ', data[i].FNumber, '; ', data[i].FText);
    Writeln('Press enter to quit program');
    Readln;
  finally
    stream.Free;
    parser.Free;
  end;
end.