Leer archivo de texto en un array 2D en C++
-
Use
fstream
para leer un archivo de texto en un array 2-D en C++ - Lea el archivo de texto en un array dinámica 2-D en C++
Este artículo discutirá los dos enfoques para leer un archivo de texto en un array 2-D en C++.
Use fstream
para leer un archivo de texto en un array 2-D en C++
Para leer nuestro archivo de texto de entrada en un array 2-D en C++, usaremos la función ifstream
. Nos ayudará a leer los datos individuales usando el operador de extracción.
Incluya la biblioteca estándar #include<fstream>
antes de usar ifstream
.
Supongamos que nuestro archivo de texto tiene los siguientes datos.
10 20 30 40
50 60 70 80
90 100 110 120
130 140 150 160
Tenemos que abrir el archivo y decirle al compilador que lea la entrada del archivo. Usaremos el constructor ifstream
para crear un flujo de archivos.
#include <fstream>
#include <iostream>
using namespace std;
int main() {
int row = 4;
int col = 4;
int myArray[row][col];
// Opening the file
ifstream inputfile("2dinput.txt");
if (!inputfile.is_open()) cout << "Error opening file";
// Defining the loop for getting input from the file
for (int r = 0; r < row; r++) // Outer loop for rows
{
for (int c = 0; c < col; c++) // inner loop for columns
{
inputfile >> myArray[r][c]; // Take input from file and put into myArray
}
}
for (int r = 0; r < row; r++) {
for (int c = 0; c < col; c++) {
cout << myArray[r][c] << "\t";
}
cout << endl;
}
}
Producción :
10 20 30 40
50 60 70 80
90 100 110 120
130 140 150 160
Como podemos ver, declaramos el tamaño del array 2-D, definimos el inputfile
y proporcionamos su dirección usando ifstream
.
Si el archivo de texto está en la misma carpeta, solo proporcione el nombre y la extensión. Sin embargo, si el archivo de texto está en otra carpeta, asegúrese de pegar la dirección completa del archivo de texto del sistema informático.
Después de declarar el archivo, usamos bucles for
para cada fila y columna para obtener la entrada del archivo de texto. Y una vez que hemos obtenido la entrada, el bucle for
anidado imprime todos los elementos del array.
El método anterior solo es adecuado para arrays bidimensionales estáticas y cuadradas en C++, donde se conoce el tamaño del array. De lo contrario, el compilador establecerá la entrada del archivo de texto en las posiciones incorrectas dentro del array 2-D.
Si desea definir un array 2-D en C++ que no sea un cuadrado, debemos crear un array del número de columnas dentro del primer bucle for
.
Considere el ejemplo de cómo definir un array 2-D no cuadrada a continuación.
// Declare number of rows
2Darray = new int*[8];
ifstream myfile("File Address");
for (int r = 0; r < 8; r++) // Outer loop for 8 rows
{
2Darray [c] = new int[5]; // Each row has 5 columns
for (int c = 0; c < 5; c++) // Inner loop for columns
{
file >> 2Darray [r][c];
}
}
Lea el archivo de texto en un array dinámica 2-D en C++
No usamos arreglos si queremos una entrada de texto para una estructura matricial dinámica de C++. En su lugar, usamos vectores.
Un vector permite la creación de arrays asignadas dinámicamente a través de la interfaz de listas. Los vectores pueden aumentar a medida que usan la memoria en montones y se desasignan automáticamente.
Supongamos que nuestro archivo de texto tiene los siguientes caracteres.
R O W 1
A B
R O W 3
X Y
R O W 5
Para crear un vector 2-D en C++, implementamos el siguiente código.
#include <fstream>
#include <iostream>
#include <string>
#include <vector>
int main() {
std::string eachrow;
std::ifstream myfile("2dinputvector.txt");
std::vector<std::vector<char> > MyVector;
while (std::getline(myfile, eachrow)) {
std::vector<char> row;
for (char &x : eachrow) {
if (x != ' ')
// add element to vector row
row.push_back(x);
}
// after iterating row in text file, add vector into 2D vector
MyVector.push_back(row);
}
for (std::vector<char> &row : MyVector) {
for (char &x : row)
// print each element
std::cout << x << ' ';
// change row
std::cout << '\n';
}
return 0;
}
Producción :
R O W 1
A B
R O W 3
X Y
R O W 5
En el programa anterior, creamos con éxito un vector 2-D. Luego abrimos el archivo para la entrada de texto usando la biblioteca ifstream
.
El bucle while
extrajo los caracteres del archivo de texto usando el método estándar getline
. Luego, la variable x
se usa para iterar cada fila del archivo de texto y empujar un elemento de regreso al vector eachrow
después de encontrar un espacio en el archivo de texto.
Después de esto, el bucle usó la función push_back
nuevamente para mover toda la fila al vector 2-D. Esto se repite para todas las entradas en todas las filas presentes en el archivo de texto.
El segundo bucle for
se usa para imprimir MyVector
.