Hoi,
ik wil slechts bepaalde regels van een file inlezen, en wil dit zo efficient mogelijk doen. Ook wil ik in de file op en neer kunnen springen. ifstream leek me handig hiervoor. Nu ben ik er een beetje me aan het spelen geweest, en dat heeft de volgende code opgeleverd. Maar kan dit niet sneller/makkelijker?
Het probleem zit bij regels 59 t/m 63, waarbij ik de file close, clear, en dan weer opnieuw open. Kan ik de file niet gewoon open laten? (alleen met seekg() terug in de file gaan werkt niet, dit geeft een "debug assertion failed" melding in MS Visual C++)
ik wil slechts bepaalde regels van een file inlezen, en wil dit zo efficient mogelijk doen. Ook wil ik in de file op en neer kunnen springen. ifstream leek me handig hiervoor. Nu ben ik er een beetje me aan het spelen geweest, en dat heeft de volgende code opgeleverd. Maar kan dit niet sneller/makkelijker?
Het probleem zit bij regels 59 t/m 63, waarbij ik de file close, clear, en dan weer opnieuw open. Kan ik de file niet gewoon open laten? (alleen met seekg() terug in de file gaan werkt niet, dit geeft een "debug assertion failed" melding in MS Visual C++)
C++:
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
| #include <iostream> //read/write files (C style) #include <vector> #include <fstream> //input (C++ style) #include <string> //strings using namespace std; //Create vector with indices of all startingpoints of each line void LoadFile(ifstream& File, vector<int> &FileIndex) { //---------------Initialize variables------------------------ const int length = 300; char dummy[length]; cout << "Loop through file...\n"; //-----------Loop over lines in SensorConfigFile------------- while(!File.eof()) { //---------------store index of line---------------------- FileIndex.push_back(File.tellg()); //------------set pointer to next line-------------------- File.getline(dummy,length); cout << dummy << " Pointer: " << FileIndex.back() << "\n"; } }; int main() { //start and end lines int start = 5; int end = 10; const int Length = 300; char FileName[] = "Testfile.txt"; char chLine[Length]; string Line; vector<int> FileIndex; //open file ifstream File(FileName); //load indices of file LoadFile(File, FileIndex); //set pointers int startindex = FileIndex[start-1]; int endindex = FileIndex[end-1]; //close and reset file File.close(); File.clear(); //re-open file File.open(FileName); //set index to startindex File.seekg(startindex); //loop over lines while(File.tellg() <= endindex ) { cout << "Pointer: " << File.tellg() << "\n"; //-------------get line from config file------------------ File.getline(chLine,Length); //convert char to string Line.clear(); Line.assign(chLine); cout << Line << "\n"; } return 0; }; |