Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 20/04/2012, à 17:36

dudule_85

Couper une chaine de caractères

Bonjour,
Voila, j'ai besoin de faire un petit programme qui m'ouvre un fichier texte dans lequel se trouve des nombres. Je voudrais pouvoir prendre ses nombres et les découper en 2 parties en sachant qu'il peuvent être de taille variable (entre 10 et 11 chiffres)

Une premiere partie dans laquelle se situe les 8 premiers chiffres et la seconde partie qui contiendrait le reste du nombre en sachant qu'il peut etre de taille variable.

exemple du contenu du fichier :
57026010222
57026009730
5702601016

Je voudrais pouvoir récupérer pour la 1er ligne les nombres 57026010 et 0222 et ainsi de suite pour les lignes suivantes.

Oriez vous une idée de comment faire?

Merci beaucoup!!!

Hors ligne

#2 Le 20/04/2012, à 18:32

pingouinux

Re : Couper une chaine de caractères

Bonjour,

while read lig
do
   n1=${lig:0:8}
   n2=${lig:8}
   printf "%8s %s\n" "$n1" "$n2"
done <fichier_texte

Hors ligne

#3 Le 20/04/2012, à 18:53

dudule_85

Re : Couper une chaine de caractères

a mince je suis bête, j'oubliais de preciser que je suis en C++. désolé mais merci quand même!! je ne savais pas qu'on pouvait faire un script de la sorte

Hors ligne

#4 Le 20/04/2012, à 19:57

pingouinux

Re : Couper une chaine de caractères

Éventuellement, tu peux montrer le bout de programme que tu as déjà écrit, en disant sur quoi tu bloques. Il y a bien quelqu'un qui pourra t'aider. Je connais le C, mais n'ai que des notions de C++.

Hors ligne

#5 Le 20/04/2012, à 20:02

dudule_85

Re : Couper une chaine de caractères

Ok, et bien pour le moment j'essaie mais la récupération ne fonctionne pas correctement, voila mon code pour le moment:

#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;

int main()
{

    char matricule_part_1[20];
    char matricule_part_2[20];

  ifstream fichier( "chevre.csv" );

    if (fichier )
    {
        string ligne; // variable contenant chaque ligne lue

        while ( getline( fichier, ligne ) )
        {
            cout << ligne <<endl;
            cout << ligne.size() << endl;

            if (ligne.size() < 8)
                cout << "erreur de matricule"<< endl;
            else{
                //on decoupe la chaine en une partie de 8 caractere et une seconde partie avec le reste
                strncpy (matricule_part_1, &ligne[0], 7);
                strcpy(matricule_part_2,&ligne[8]);
                cout<< matricule_part_1 <<endl;
                cout<< matricule_part_2 <<endl;
            }
        }
    }
    else
    {
        cout << "ERREUR: Impossible d'ouvrir le fichier en lecture." << endl;
    }

    return 0;
}

Merci wink

Hors ligne

#6 Le 20/04/2012, à 20:29

pingouinux

Re : Couper une chaine de caractères

Je pense qu'il suffit de remplacer cette ligne :

          strncpy (matricule_part_1, &ligne[0], 7);

par celles-ci :

// Chaîne initialisée à 0, pour avoir un caractère nul en fin de chaîne après la copie
          memset(matricule_part_1,0,sizeof(matricule_part_1)); 
// La longueur à copier est de 8 caractères
          strncpy (matricule_part_1, &ligne[0], 8);

Édité :
ou bien :

// La longueur à copier est de 8 caractères
          strncpy (matricule_part_1, &ligne[0], 8);
// Caractère nul en fin de chaîne
          matricule_part_1[8]=0;

Dernière modification par pingouinux (Le 21/04/2012, à 05:53)

Hors ligne