Bonjour,
j'aimerai savoir comment ne pas lire une ligne qui comme par un '#' dans un fichier .txt, voici mon code et une partie de mon fichier .txt
int main() {
// string null1;
int lines = 0;
ifstream file("control_ressources.txt", ios::in); if ( file ) {
while ( file.ignore( std::numeric_limits<int>::max(), '\n' ) ) //recuperation du nombre de ligne dans le fichier { ++lines; } }
string * hostname = new string[lines]; //allocation dynamique de string*lines string * parc = new string[lines];
ifstream fichier("control_ressources.txt", ios::in); // on ouvre en lecture
if(fichier) { for (int i = 0; i < lines; ++i) { fichier >> hostname [i] >> parc [i]; //lire et stocker l'ID pc dans hostname et le parc dans parc cout << hostname[i]; // afficher les ID pc cout << " "; cout << parc[i]; // affciher les parcs correspondants cout << '\n'; }
fichier.close(); }
else cerr << "Impossible d'ouvrir le fichier !" << endl;
delete [] hostname; delete [] parc; return 0; }
# Parc lt = parc_style=lt # TEST DSIN VVLT parc_style=lt VVLT parc_style=lt VVLT parc_style=l VVLT parc_style=lt VVLT14 parc_style=lt # Parc af= parc_style=af # a exploiter pour toutes conversion VVC0RE parc_style=aft VVC0RR parc_style=aft
A voir également:
Python lire un fichier ligne par ligne
Lire ligne fichier python - Meilleures réponses
Lire un fichier ligne par ligne python - Meilleures réponses
Un std::ifstream contient déjà l'option std::ios::in, donc pas besoin de la remettre.
Le fichier.close() est inutile, un stream se ferme déjà tout seul.
Pourquoi faire des new string[], alors que tu as la classe std::vector ?
Pourquoi compter le nombre de lignes du fichier, préallouer un tableau, puis le relire à nouveau ? Ça n'a pas de sens ! Tu le lis une seule fois en ajoutant ce qu'il faut... Donc plutôt utiliser: std::getline, std::vector (.push_back), et un seul std::ifstream.
Je te corrige ton code, et te laisse trouver comment éviter les "#" (facile si tu as compris l'explication):
#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
struct Info
{
std::string hostname;
std::string parc;
};
int main()
{
std::ifstream file("control_ressources.txt");
if (!file)
{
std::cerr << "Impossible d'ouvrir le fichier !" << std::endl;
return 1;
}
std::vector<Info> infos;
std::string line;
while (std::getline(file, line))
{
// Vérifier si line commence par un #
Info info;
std::istringstream buff(line);
buff >> info.hostname >> info.parc;
infos.push_back(info);
}
for (std::vector<Info>::iterator it = infos.begin(); it != infos.end(); ++it)
std::cout << "host: " << it->hostname << ", parc: " << it->parc << std::endl;
return 0;
}