Leer archivo línea por línea usando ifstream en C++

Resuelto dukevin asked hace 12 años • 8 respuestas

El contenido del archivo.txt es:

5 3
6 4
7 1
10 5
11 6
12 3
12 4

¿ Dónde 5 3hay un par de coordenadas? ¿Cómo proceso estos datos línea por línea en C++?

Puedo obtener la primera línea, pero ¿cómo obtengo la siguiente línea del archivo?

ifstream myfile;
myfile.open ("file.txt");
dukevin avatar Oct 24 '11 03:10 dukevin
Aceptado

Primero, haz un ifstream:

#include <fstream>
std::ifstream infile("thefile.txt");

Los dos métodos estándar son:

  1. Supongamos que cada línea consta de dos números y lea token por token:

    int a, b;
    while (infile >> a >> b)
    {
        // process pair (a,b)
    }
    
  2. Análisis basado en líneas, utilizando secuencias de cadenas:

    #include <sstream>
    #include <string>
    
    std::string line;
    while (std::getline(infile, line))
    {
        std::istringstream iss(line);
        int a, b;
        if (!(iss >> a >> b)) { break; } // error
    
        // process pair (a,b)
    }
    

No debe mezclar (1) y (2), ya que el análisis basado en tokens no devora nuevas líneas, por lo que puede terminar con líneas vacías falsas si las usa getline()después de que la extracción basada en tokens lo haya llevado al final de un línea ya.

Kerrek SB avatar Oct 23 '2011 20:10 Kerrek SB

Úselo ifstreampara leer datos de un archivo:

std::ifstream input( "filename.ext" );

Si realmente necesitas leer línea por línea, haz esto:

for( std::string line; getline( input, line ); )
{
    ...for each line in input...
}

Pero probablemente sólo necesites extraer pares de coordenadas:

int x, y;
input >> x >> y;

Actualizar:

En su código usa ofstream myfile;, sin embargo, oin ofstreamsignifica output. Si desea leer del archivo (entrada), utilice ifstream. Si desea leer y escribir, utilice fstream.

K-ballo avatar Oct 23 '2011 20:10 K-ballo