Ver Mensaje Individual
  #5 (permalink)  
Antiguo 18/12/2013, 12:44
dehm
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 14 años
Puntos: 10
Respuesta: Extraer palabas de un fichero de texto

Hola vosk:

Es que creo que busco algo diferente, aunque después de tantas horas no sé si ya estoy perdiendo la perspectiva.

Supongamos que tengo el siguiente archivo de texto. Lo he pasado a un char:
Código C++:
Ver original
  1. char datos[]="\n\n$registro1#dato11#dato12#dato13$registro2#dato21#dato22largooooooooooo\nooooooooo#dato23\n$registro3#dato13##dato33";

Bueno, pertenece a una base de datos cuyos registros empiezan por $, y dentro de ellos cada campo está separado por #.
Por otro lado algun campo puede ser muy grande y tener dentro párrafos separados con \n que interesa mantener.
También pueden existir campos nulos que han de estar reflejados.
Por último, aunque es recomendable, no siempre los registros estarán separados por un \n (realmente no se da el caso, pero podría darse, así que mejor no dejar esa debilidad). Eso quiere decir que la separacion entre registros no es un salto de línea, sino el símbolo $.
Y además puede haber saltos de línea al principio.

Con todas estas cosas, me gustaría hacer que el programa cogiera un registro, lo dividiera en campos, y luego el segundo, lo dividiera en campos y así.
Pero no que divida todos los campos de una vez.
Así, en el ejemplo habría de hacer:

Extraigo el primer registro:
registro1#dato11#dato12#dato13

Separo los campos y los muestro:
Campo1: dato11
Campo2: dato12
Campo3: dato13

Extraigo el segundo registro:
registro2#dato21#dato22largooooooooooo\nooooooooo# dato23#dato24

Separo los campos y los muestro:
Campo 1: dato21
Campo2: dato22largooooooooooo\nooooooooo //(me interesa mantener ese \n)
Campo3: dato23

Extraigo el tercer registro:
registro3#dato13##dato33

Separo los campos y los muestro:
Campo1: dato13
Campo2: (vacio) interesa que exista aunque esté vacio
Campo3: dato 33

Uff...pues mira que no me parecía complicado, pero no consigo que me salga.
De todas formas me miro de nuevo el post que me has dicho, entre otras cosas ya me queda confirmado que se pueden usar varios delimitadores diferentes y además (momento peloteo) me ha gustado el código que has puesto, aunque he de terminar de interiorizarlo.
Saludos