Por lo tanto, estoy tratando de encontrar una forma de fgets() una línea específica en un archivo de texto en C, para copiar el contenido de la línea en un búfer más permanente:¿Cómo se escribe() una línea específica de un archivo en C?
Esencialmente, me preguntaba si era una manera de hacerlo sin algo similar al siguiente código:
FILE *fp;
fp = fopen(filename, "r");
char line[256];
char * buffer;
int targetline = 10;
while(targetline > 0)
{
fgets(line, 256, fp)
}
buffer =(char*)malloc(sizeof(char) * strlen(line));
strcpy(buffer, line);
Así que, básicamente, no quiero para recorrer el archivo n-1 veces sólo para llegar a la línea de orden n ... simplemente doesn Parece muy eficiente (y, como es tarea, necesito obtener un 100% jaja).
Cualquier ayuda sería apreciada.
Si sus líneas pueden tener una longitud arbitraria, ¿cómo espera omitir 'n' líneas en tiempo constante? –
La única alternativa real es crear un índice de dónde comienza cada línea (lea el archivo una vez, cree el índice y luego utilícelo para buscar directamente una línea hasta/a menos que el archivo cambie). También tenga en cuenta que su 'malloc' necesita agregar 1 para dejar espacio para el terminador NUL. –
Algunos mecanismos para almacenar archivos de texto podrían proporcionar una manera plausible de acceder a la línea enésima en tiempo constante, o al menos mejor que el tiempo lineal. Probablemente algunos de los formatos de archivo utilizados en VMS hacen esto. Pero la biblioteca estándar de C no expone ninguno de esos mecanismos, y en la mayoría de los sistemas operativos ni siquiera es posible para los archivos de texto sin formato, a menos que construya un índice usted mismo. Entonces, no es una pregunta poco razonable, pero la respuesta es no. –