[C con Clase] No se como puedo leer archivos de textos con tabuladores

Davidson, Steven srd4121 en njit.edu
Vie Ene 10 21:03:30 CET 2020


Hola Miguel,

Viendo el fichero de texto a leer, la forma más sencilla es usar el
operador >> para la lectura formateada de un canal de fichero. Cree un
objeto de la clase 'std::ifstream' (definida en <fstream>) para abrir el
fichero y simplemente vaya leyendo cada texto que será interpretado y
convertido a un número entero para ser guardado en cada elemento
correspondiente en el array (o vector). Esto es,

int aCifras[1503];

std::ifstream ifsDatos( "EANA.txt" );

ifsDatos >>  aCifras[0];  // Aseguramos la primera lectura

for( int i=1; !ifs.eof(); ++i )
  ifsDatos >>  aCifras[i];

En general, uno debe intentar la lectura seguida de una validación de tal
lectura (la condición en el bucle 'for'). El operador >> aplica varios
formatos y además ignora los caracteres de espacios blancos que son: ' ',
'\t', '\r', '\n', '\f', y '\v'.

Si necesita mayor control acerca de los criterios de la lectura, como por
ejemplo, realizar tandas de lecturas hasta el final de la línea, entonces
podría leer una línea completa (hasta el fin-de-línea), para luego procesar
esa gran cadena de caracteres independientemente de otras líneas. Podemos
usar 'std::istringstream' (definida en <sstream>) para crear un objeto
parecido a un fichero pero "lee" de una cadena de caracteres. Por ejemplo,

int aCifras[1503];

std::ifstream ifsDatos( "EANA.txt" );

char szLinea[10240];  // 10 KB de búfer

int i=0;
while( !ifs.eof() )
{
  // Procesar línea a línea

  ifs.getline( szLinea, 10240 );  // Leer una línea de texto, sin incluir
'\n'

  std::istringstream issLinea( szLinea );

  issLinea >>  aCifras[i];  // Aseguramos la primera lectura

  while( !ifs.eof() )
    issLinea >>  aCifras[++i];
}

Aquí he metido todas las cifras en 'aCifras', pero al ir línea a línea,
puede optar por guardar la secuencia de cifras en otra parte.


Espero que esto le oriente.

Steven


On Fri, Jan 10, 2020 at 2:35 PM miguel manente <manente2001 en yahoo.com.ar>
wrote:

> Hola soy Miguel, me permito molestarlos, pero necesito una ayuda con C++.
> Tengo un archivo de texto de dos registro con aproximadamente 1503 campos
> por cada registros, son cifras numericas como strings tabuladas entre
> cifras y cifras.
> lo que necesito que me den una mano es poder leer el archivo y convertir
> cada numero que esta en un registro tipo string en un entero para después
> cargarlo a un vector.
>
> Realmente necesito su ayuda por que no se como hacerlo. Adjunto archivo de
> texto.
>
> Agradecería mucho su ayuda.
>
> Gracias muy atte.
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20200110/ed86d183/attachment-0001.html>


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