[C con Clase] getline()

Juan jmicanovelles en gmail.com
Jue Jun 19 19:43:10 CEST 2008


El pasado 2008-06-17 21:23:29, Carlos escribió:

Estuve buscando con stringstream, pero no encontré ningún ejemplo, aunque en realidad no necesitaba sacar lineas, sino hacer bloques de x lineas, así que lo solucioné simplemente comparando caracter por caracter con '\n' y poniendo cada bloque en un vector de string, sin eliminar los saltos de linea. De todas maneras era esto lo que buscaba. Muchas gracias.
Juan



C> Hola Juan,
C> una posibilidad es convertirlo en un stringstream y así poder hacer uso de
C> la función getline.
C> Algo así:
C>   stringstream str;
C>   str << data;
C>   string nextLine;
C>   while(str.peek() != EOF){
C>     getline(str, nextLine);
C>     cout << "Linea: " << nextLine << endl;
C>   }
C> Lo malo es que se hacen varias copias, con lo que no es la forma más rápida
C> de hacerlo.
C> Otra posibilidad es hacerlo haciendo uso de strsep. Es una función
C> "peligrosa" y está desaconsejado su uso por los expertos porque modifica el
C> contenido de sus argumentos, así que hay que ir con cuidado.
C> void getLines(char *data, vector<char *> &lines){
C>   lines.clear();
C>   char **currentChar = &data;
C>   while(*currentChar != NULL){
C>     lines.push_back(strsep(currentChar, "\n"));
C>   }
C> }
C> La función anterior rellena el vector lines con punteros a cada una de las
C> líneas.
C> Debido al comportamiento de strsep, el char* data que pasaste se verá
C> modificado, y todos los \n habrán sido modificados por \0, con lo que si
C> pensabas utilizar el char* inicial en otra parte no te serviría. Para
C> solventar este problema, podrías valerte de strchr, que lo que hace es
C> buscar un caracter, y así buscar los distintos \n, e ir haciendo copias sin
C> modificar tus datos originales.
C> Saludos,
C>    Carlos
C> El día 17 de junio de 2008 20:17, juan <jmicanovelles en gmail.com> escribió:
C> > Hola lista:
C> >
C> > Tengo un  char[x]="muchas lineas"
C> > Tengo que pasar el array a una funcion y sacar las lineas.
C> > getline me sirve para un archivo o para entradas 'cin', pero
C> > para un buffer, hay algo?
C> > Juan
C> > _______________________________________________
C> > Lista de correo Cconclase Cconclase en listas.conclase.net
C> > http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
C> > Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
C> >
C> _______________________________________________
C> Lista de correo Cconclase Cconclase en listas.conclase.net
C> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
C> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ


Más información sobre la lista de distribución Cconclase