lea línea por línea de la manera más eficiente * plataforma específica *
Estoy buscando la forma más eficiente de leer un archivo de texto.
teniendo en cuenta todas las ventajas posibles, como la ventaja de:
el código será el sistema operativo Windows específico de la plataforma
y con el hecho de que estoy escribiendo un específico para la CPU actual, etc.
* No importa, no es multiplataforma.
simplemente problema de rendimiento
¿Cómo podría codificar de la manera más rápida, leyendo cada línea de un archivo de texto en una estructura?
decir que la estructura es:
typdef struct _FileL{
uint lidx;
char* lncontent;
} FileL;
Estaba pensando en algo como:
pasando una matriz dinámica deFileL
arriba y la ruta al archivo, ¿cuál sería la forma más eficiente de llenar y devolver una colección de líneas del archivo dado?
getFileLines(char* fullPath, FileL** fileLines){
uint linesCount = 0;// total lines
uint curLnIndex = 0;// lines counter
FILE* srcFL; // will hold the source file using passed fullPath
// now read file into memory
//that is the only way i could think of
//to be able to assign lineCount used to calculate the array length
//and also the fastest way is to read the whole file into memory (?)
srcFL = fopen(fullPath,"r"); // or open() instead of fopen() ?
// problem:
// assigning lineCount somehow would cost the time of reading
// and might aswell just populate it and already store to array..
// so what is the workaround ?
*fileLines =(FileL*) malloc (linesCount * sizeof(FileL));
FileL* CurLn = *fileLines;
while(curLnIndex != linesCount){
char* TmpLnCont;
//read line into TmpLnCont..
CurLn->lidx = curLnIndex ;
CurLn->lncontent = (char*)malloc(sizeof(TmpLnCont));
strcpy(CurLn->lncontent, TmpLnCont);
}
}
¿Cómo sería un enfoque más eficiente?
Editar:
quería actualizar la pregunta, ya que me gustaría abordar el tema de la eficiencia: la forma más eficiente hasta el detalle de escanear el archivo para cada línea, es la única forma en que char by char, cómo evitar una llamada a funcionar en cada char ... cualquier cosa para maximizar el rendimiento del bucle en cada línea, lo que significa llegar a la definición de una línea de manera eficiente ...