Lire un fichier texte dans un tableau 2D en C++
-
Utilisez
fstream
pour lire un fichier texte dans un tableau 2D en C++ - Lire un fichier texte dans un tableau 2D dynamique en C++
Cet article traite des deux approches de lecture d’un fichier texte dans un tableau 2D en C++.
Utilisez fstream
pour lire un fichier texte dans un tableau 2D en C++
Pour lire notre fichier texte d’entrée dans un tableau 2D en C++, nous utiliserons la fonction ifstream
. Cela nous aidera à lire les données individuelles à l’aide de l’opérateur d’extraction.
Incluez la bibliothèque standard #include<fstream>
avant d’utiliser ifstream
.
Supposons que notre fichier texte contient les données suivantes.
10 20 30 40
50 60 70 80
90 100 110 120
130 140 150 160
Nous devons ouvrir le fichier et dire au compilateur de lire l’entrée du fichier. Nous allons utiliser le constructeur ifstream
pour créer un flux de fichier.
#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;
}
}
Production:
10 20 30 40
50 60 70 80
90 100 110 120
130 140 150 160
Comme nous pouvons le voir, nous avons déclaré la taille du tableau 2-D, défini le inputfile
et fourni son adresse à l’aide de ifstream
.
Si le fichier texte se trouve dans le même dossier, indiquez uniquement le nom et l’extension. Toutefois, si le fichier texte se trouve dans un autre dossier, veillez à coller l’adresse complète du fichier texte à partir du système informatique.
Après avoir déclaré le fichier, nous utilisons des boucles for
pour chaque ligne et colonne pour obtenir l’entrée du fichier texte. Et une fois que nous avons obtenu l’entrée, la boucle for
imbriquée imprime chaque élément du tableau.
La méthode ci-dessus ne convient que pour les tableaux 2D statiques et carrés en C++, où la taille du tableau est connue. Sinon, le compilateur définira l’entrée du fichier texte aux mauvaises positions à l’intérieur du tableau 2-D.
Si vous voulez définir un tableau 2-D en C++ qui n’est pas un carré, nous devons créer un tableau du nombre de colonnes à l’intérieur de la première boucle for
.
Considérez l’exemple de la façon de définir un tableau 2D non carré ci-dessous.
// 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];
}
}
Lire un fichier texte dans un tableau 2D dynamique en C++
Nous n’utilisons pas de tableaux si nous voulons une entrée de texte pour une structure de matrice C++ dynamique. Au lieu de cela, nous utilisons des vecteurs.
Un vecteur permet la création de tableaux alloués dynamiquement via l’interface des listes. Les vecteurs peuvent augmenter car ils utilisent la mémoire en tas et sont automatiquement désalloués.
Supposons que notre fichier texte comporte les caractères suivants.
R O W 1
A B
R O W 3
X Y
R O W 5
Pour créer un vecteur 2D en C++, nous implémentons le code ci-dessous.
#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;
}
Production:
R O W 1
A B
R O W 3
X Y
R O W 5
Dans le programme ci-dessus, nous avons réussi à créer un vecteur 2D. Ensuite, nous avons ouvert le fichier pour la saisie de texte à l’aide de la bibliothèque ifstream
.
La boucle while
extrait les caractères du fichier texte en utilisant la méthode standard getline
. La variable x
est ensuite utilisée pour itérer chaque ligne du fichier texte et repousser un élément dans le vecteur eachrow
après avoir rencontré un espace dans le fichier texte.
Après cela, la boucle a utilisé à nouveau la fonction push_back
pour déplacer toute la ligne dans le vecteur 2-D. Ceci est répété pour toutes les entrées dans toutes les lignes présentes dans le fichier texte.
La seconde boucle for
est utilisée pour imprimer MyVector
.