Lire un fichier texte dans un tableau 2D en C++

Dhruvdeep Singh Saini 12 octobre 2023
  1. Utilisez fstream pour lire un fichier texte dans un tableau 2D en C++
  2. Lire un fichier texte dans un tableau 2D dynamique en C++
Lire un fichier texte dans un tableau 2D 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.