TAB of comma separated values inlezen van een bestand komt in de practijk echt vaak voor. Ik doe het altijd als volgt. Maak een record structure waarin je de gegevens gaat opslaan die in 1 zo'n tekst-regel staan. En maak een functie die een string (1 regel) converteerd naar zo'n record structure. Dus zoiets:
Delphi:
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
| const
c_Separator = #9; {tab}
type
TMyRecord = record
Naam : String;
Adres : String;
Woonplaats : String;
end; {record}
function OmzettenRegel(strRegel : String) : TMyRecord;
{ zet tab separated values om in een record structure }
var
strField : String;
tmpRecord : TMyRecord;
Field, i : Integer;
begin
Field := 0;
{ zoek naar 1ste tab in regel }
i := Pos(c_Separator, strLine);
{ doorloop gehele regel }
while (i <> 0) do
begin
{ haal veld uit regel }
strField := Trim(Copy(strLine, 1, i-1));
{ verwijder veld van regel }
Delete(strLine, 1, i);
strLine := Trim(strLine);
{ stop veld in bijbehorende veld van record }
Case Field Of
{Naam : String}
00 : tmpRecord.Naam := strField;
{Adres : String}
01 : tmpRecord.Adres := strField;
{Woonplaats : String}
02 : tmpRecord.Woonplaats := strField;
end; {case}
{ volgende veld }
Field := Field + 1;
{ zoek volgende seperator-character in input regel }
i := Pos(c_Separator, strLine);
end; {while}
{ function result }
OmzettenRegel := tmpRecord;
end; |
vervolgens kan je makkelijk in een loopje het bestand regel voor regel inlezen, en elke regel mbv die functie omzetten naar je record structure

dus zoiets
Delphi:
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
| procedure InlezenBestand;
var
F : TextFile;
strLeesRegel : String;
i : Integer;
tmpMyRecord : TMyRecord;
begin
{ input bestand voorbereiden }
FileMode := 0; {readonly}
AssignFile(F, 'inputbestand.txt');
Reset(F);
{ regel voor regel inlezen en array vullen }
i := 0;
repeat
ReadLn(F, strLeesRegel);
tmpMyRecord := OmzettenRegel(strLeesRegel);
{ stop nu de record in een array of whatever }
i := i + 1;
GlobalArrayOfMyRecords[i] := tmpMyRecord;
until EOF(F);
Close(F);
end; |