begin process at 2012 05 28 17:55:13
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

détecter si une chaine de caractère est vide


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

détecter si une chaine de caractère est vide

dimanche 25 septembre 2011 à 18:40:41 | détecter si une chaine de caractère est vide

snake57

Bonjour à tous,

Alors je suis en c++ et je lis une à une toute les lignes d'un fichier texte.

Je range la ligne lue dans la variable "lignecourante". Ma variable lignecourante est un string.

J'aimerais pourvoir faire une action lorsque la ligne lue est vide.

J'ai donc essayer ceci : if(ligneCourante=="")

Mais le if n'est jamais validé.

Quelqu'un pourait m'aider?
dimanche 25 septembre 2011 à 20:34:31 | Re : détecter si une chaine de caractère est vide

LA_Tupac

Membre Club
Salut! la std a prévu ce cas de figure comme un tas d'autres et c'est en grande partie grace à elle que j'adore ce code

std::string.empty()
dimanche 25 septembre 2011 à 21:04:30 | Re : détecter si une chaine de caractère est vide

snake57

Je viens de tester chez moi et ça ne marche pas.

Voila le bout de code concerné :

Code C/C++ :
        ifstream fichierGC(nomFichierGC.c_str(), ios::in);  // on ouvre le fichier en lecture

        if(fichierGC)  // si l'ouverture a réussi
        {       
                while(not fichierGC.eof())  // tant qu'on est pas à la fin du fichier
	        {
	        	nbrLigneGC++; // on compte le nombre de ligne du fichier
	        	getline(fichierGC, ligneCourante); //on met la ligne dans la variable intermédiaire
	        	if(ligneCourante.empty())
	        	{
	        		cout << "ligne " << nbrLigneGC;
	        	}
	        	contenuFichierGC.push_back(ligneCourante); // On ajoute une ligne dans le tableau de string et on y range la ligne du fichier texte qui vient d'être lue
	      	}
	      	
                fichierGC.close();  // on ferme le fichier
        }
        else  // sinon
                cerr << "Impossible d'ouvrir le fichier " << nomFichierGC << " !" << endl;


Je ne passe jamais dans mon if pourtant le fichier texte contient bien des lignes vides...
dimanche 25 septembre 2011 à 23:46:52 | Re : détecter si une chaine de caractère est vide

CptPingu

Administrateur CodeS-SourceS
Plusieurs remarques:
- Évite les "using namespace", voir: [ Lien ]
- std::ios::in est inutile, car tu utilise un std::ifstream (l'option est alors implicite).
- while(not fichierGC.eof()) => utilise "!" et non "not". De plus un simple "while (fichierGC)" suffit.
- ligneCourante == "" et ligneCourante.empty() donne le même résultat, mais il est plus élégant de marquer ligneCourante.empty()
- fichierGC.close() => Non nécessaire, puisque le fichier se fermera tout seul à la destruction de l'objet de type std::ifstream (principe du RAII).

Aucun problème avec ceci:
Code C/C++ :
#include <iostream>
#include <fstream>

int main()
{
  std::ifstream file("test");

  int nb = 0;
  std::string line;
  while (file)
  {
    std::getline(file, line);
    ++nb;
    if (line.empty())
      std::cout << "<EMPTY> " << line << std::endl;
    else
      std::cout << line << std::endl;
  }

  return 0;
}


________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
lundi 26 septembre 2011 à 00:20:46 | Re : détecter si une chaine de caractère est vide

snake57

Alors déjà un grand merci pour tous les conseils que tu m'a donné, je suis preneur de toute ces petites choses ;)

J'en profite pour te demander une petite précision, tu dis que le fichier se ferme tous seul lorsque l'objet est détruit, mais peux tu me dire a quel moment l'objet est détruit?

Bon sinon j'en reviens à mon problème. Apparemment tu as l'air de me dire que mon code est bon avec mon if(ligneCourante.empty()) pourtant le fichier texte que je lis contient plusieurs lignes vides et le if en question n'est jamais validé (je ne passe pas dedans). Je ne comprends donc pas d'où vient le problème.
lundi 26 septembre 2011 à 01:21:54 | Re : détecter si une chaine de caractère est vide

LA_Tupac

Membre Club
Pour la destruction, tout dépend de ton code, si elle fait partie d'un autre objet elle est détruite quand il l'est, ou en fin de fonction si elle est crée dedans...
Pour ton soucis, essaye d'afficher les lignes à chaque boucle pour voir si elles sont effectivement vides....
Code C/C++ :
std::cout<<"ligne:"<<ligneCourante<<":\n";

Si tu obtiens "ligne: :" c'est qu'il y'a un espace ...
lundi 26 septembre 2011 à 01:29:16 | Re : détecter si une chaine de caractère est vide

CptPingu

Administrateur CodeS-SourceS

peux tu me dire a quel moment l'objet est détruit?


Un objet vie dans un "scope".

Quelques exemples:
Code C/C++ :
int func()
{
  Class obj; // Création
  // code

  return 0; // obj est détruit après le return
}


Code C/C++ :
void func()
{
  Class pouet; // Création pouet

  {
    Class obj; // Création obj
    // code
  } // obj est détruit

  // code

  // Destruction pouet
}


Il est effectivement possible que tu aies des caractères invisibles (espace, tabulation, saut de ligne, ...) ou non affichables (généralement dû à un encoding mal supporté).

Fais donc voir le contenu du fichier en question.

________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
lundi 26 septembre 2011 à 01:53:27 | Re : détecter si une chaine de caractère est vide

snake57

Je viens de trouver mon soucis. Mon fichier est dans un format peu courant, il à été enregistré sur OS/2 un vieil OS qui n'existe plus...

Donc une ligne vide n'est pas considérée comme tel car le codage du fichier n'est pas standard.

Et la je bloque à nouveau
lundi 26 septembre 2011 à 01:59:45 | Re : détecter si une chaine de caractère est vide

snake57

CptPingu c'est exactement ça, j'avais pas vu que tu avais répondu.

Le problème je peux pas vous faire voir mon fichier car si je le copie/colle ici on verra effectivement des lignes vides et pas autre chose.
lundi 26 septembre 2011 à 10:36:36 | Re : détecter si une chaine de caractère est vide

CptPingu

Administrateur CodeS-SourceS
2 solutions:
- Tu changes l'encodage du fichier via notepad++(Windows) ou emacs (Linux). Tu peux aussi voir les caractères spéciaux en tapant un "cat -A ton_fichier"
- Si tu dois le lire tel quel, alors repère le caractère de délimitation, et lis caractère par caractère. À toi de séparer "à la main", les différentes phrases.

________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question

1 2

Cette discussion est classée dans : caractère, chaine, détecter, vide, lignecourante


Répondre à ce message

Sujets en rapport avec ce message

Ajouter chaine de caractère à une ComboBox SANS les MFC [ par JMGR ] Bon... Tout est dans le titre, non ? HELP...chaine de caractères....en C..défi TP [ par SniPi ] Voici un exercice bien sympatique à faire en C.Je vous passerez le corrigé de ce TP mercredi prochain, en attendant j'aimerais voir ce que vous pensez pbme avec chaine de caractère et sscanf (débutant :( ) [ par peyou ] sur une chaine de caractère de la forme "bidule = machin", je voudrais extraire les deux chaines "bidules" et " machin"1/ le nombre d'espace autour du fonction avec séparateur?? [ par tintin72 ] Bonjour,Je voudrai savoir s'il existe une fonction qui lise une chaine de caractères et prenne en argument un caractère séparateur ?ex: char * unePhra manipulation desformules logiques : URGENT [ par The_Legacy ] Bonjour, je suis en train de développer un petit programme qui permet d'évaluer des expression logiques telles que ((a et b) ou (c et (non d))).A part URGENT : Problème de "cin" [ par monomanahune ] Monomanahune J'ai un petit problème sur un cin.Je souhaiterais rentrer une chaine de caractère en utilisant cinmais je voudrais pouvoir entrer égaleme Parsage de chaine en javascript [ par syl2 ] Bonjour,j'essaye de réaliser une fonction qui va me tester la validité de mon champs nom dans un formulaire HTML. C'est à dire que dans ce champs, je Chaine de caractère ! [ par rems14 ] Bonjour, j'ai fais un petit programme qui ne marche pas. POuvais vous me dire ce qui ne marche pas. Je vous explique, je veux demander le prénom de qu transformer un caractère en une chaine de caractères [ par zarce ] bonjour j'utilise une fonction qui affiche à l'écran (graphique) des chaines de caractères la syntaxe est du style ...DrawString(posX,posY, chaine de Est-il possible d'obtenir une chaine de caractère contenant le nom d'une variable ?? [ par vinvay ]


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,061 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales