Kemarin ke customer, dan dia punya masalah. Ada file CSV yang isinya bisa ratusan record, tapi pengen bisa displit max. 200 record. (Akhirnya! Ada alasan untuk coding Delphi lagi!). Well, less than 10 minutes, aplikasi kecil mungil untuk menolong dia akhirnya selesai. Sebenarnya file ini bisa digunakan untuk split sembarang text file. Tapi kemarin karena dimintanya CSV ya default open dialognya hanya semua yang berextension CSV.
Seperti biasa, aku pake komponen Dev Express. Kalau mau buka, ganti dulu komponen-komponen berawalan Cx dengan komponen standar VCL.
Procedur splitnya sbb:
procedure TformMain.Split(fileInput: String);
var
inputList, targetList: TStringList;
i, j, max, sequence: integer;
inputFileName: String;
outputDir: String;
begin
inputList := TStringList.Create;
targetList := TStringList.Create;
inputFileName := ExtractFileName(fileInput);
outputDir := ExtractFileDir(fileInput);
inputList.LoadFromFile(fileInput);
i := 0;
sequence := 1;
progressBar.Properties.Max := inputList.Count;
max := StrToIntDef(edMaxLength.Text, 200);
while i < inputList.count do
begin
j := 0;
targetList.Clear;
while (j < max) and (i < inputList.Count) do
begin
targetList.Add(inputList[i]);
Inc(j);
Inc(i);
progressBar.Position := progressBar.Position + 1;
if (i Mod 50) = 0 then
Application.ProcessMessages;
end;
targetList.SaveToFile(outputDir + ” + inputFileName + ‘_no_’ + VarToStr(sequence) + ‘.csv’);
Inc(sequence);
end;
targetList.Free;
inputList.Free;
end;
Jadi kalau sebuah file CSV berisi 456 record, max record per file setelah displit 300, maka akan ada dua file hasil split, masing-masing berisi 300 dan 156 record.