1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- 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.
|