[C con Clase] getline()

Carlos Segura carlossegurag en gmail.com
Mar Jun 17 23:23:29 CEST 2008


Hola Juan,
una posibilidad es convertirlo en un stringstream y así poder hacer uso de
la función getline.
Algo así:
  stringstream str;
  str << data;
  string nextLine;
  while(str.peek() != EOF){
    getline(str, nextLine);
    cout << "Linea: " << nextLine << endl;
  }

Lo malo es que se hacen varias copias, con lo que no es la forma más rápida
de hacerlo.
Otra posibilidad es hacerlo haciendo uso de strsep. Es una función
"peligrosa" y está desaconsejado su uso por los expertos porque modifica el
contenido de sus argumentos, así que hay que ir con cuidado.

void getLines(char *data, vector<char *> &lines){
  lines.clear();
  char **currentChar = &data;
  while(*currentChar != NULL){
    lines.push_back(strsep(currentChar, "\n"));
  }
}

La función anterior rellena el vector lines con punteros a cada una de las
líneas.
Debido al comportamiento de strsep, el char* data que pasaste se verá
modificado, y todos los \n habrán sido modificados por \0, con lo que si
pensabas utilizar el char* inicial en otra parte no te serviría. Para
solventar este problema, podrías valerte de strchr, que lo que hace es
buscar un caracter, y así buscar los distintos \n, e ir haciendo copias sin
modificar tus datos originales.

Saludos,
   Carlos

El día 17 de junio de 2008 20:17, juan <jmicanovelles en gmail.com> escribió:

> Hola lista:
>
> Tengo un  char[x]="muchas lineas"
> Tengo que pasar el array a una funcion y sacar las lineas.
> getline me sirve para un archivo o para entradas 'cin', pero
> para un buffer, hay algo?
> Juan
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20080617/812ab936/attachment.html>


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