Ok, donc j'ai un énorme fichier que je veux lire dans 1 chapitre à la fois. un chapitre est délimité par '$'
. Je ne suis pas vraiment familier avec C++ pour le moment, donc j'ai fait quelque chose qui serait lu dans un chapitre comme je l'attendrais en C/C++.C++ lire le fichier texte jusqu'à un délimiteur spécifique
#include <nds.h>
#include <stdio.h>
#include <string>
#include <vector>
#include <sstream>
int dataFileLoc = 7;
std::string fileReader(){
FILE * dataFile;
std::string chapterBuffer = "";
const int buffersize = 1024;
char charBuffer[buffersize];
bool foundEnd = false;
dataFile = fopen("xc3_.tsc", "rt");//open data file
fseek(dataFile,dataFileLoc,SEEK_SET);
while(!foundEnd){
fread(charBuffer,1,buffersize,dataFile);
for(int i=1; i<buffersize; i++){
if(charBuffer[i] == '$'){
foundEnd = true;
charBuffer[i] = '\0';
dataFileLoc = ftell(dataFile)-(buffersize-i);
break;//break to spare some time
}
}
chapterBuffer.append(charBuffer);
}
fclose(dataFile);//done with the file for now.
checkerTemp(chapterBuffer);
return chapterBuffer;
}
Le résultat devrait être bon. Je n'ai jamais encore atteint la fin du fichier. donc il pourrait échouer là. Cependant, il semble apparemment aléatoire (cohérente, mais à des endroits apparemment aléatoires). L'échec entraînerait une injection de données indésirables dans la chaîne (valeur de 8 caractères), suivie par des données normales à nouveau.
Est-ce que quelqu'un a une idée de ce qui pourrait causer cela, ou quelqu'un a-t-il une bonne façon de le faire en C++? Quelque chose avec un lecteur de chaîne?
Merci à l'avance,
-Smileynator
Extrayez ['std :: getline'] (http://fr.cppreference.com/w/cpp/string/basic_string/getline). Et bien sûr, vous devriez en apprendre davantage sur le C++ [installations d'entrée/sortie] (http://en.cppreference.com/w/cpp/io). –
Utilisez 'getline (file, data, '$')', remplacez vingt lignes de code par une. – john
Le premier caractère du tampon n'est pas analysé. Utilisez 'for (int i = 0; ...' – suspectus