Position d'une chaine de caractére dans un fichier ecriture et lecture [Résolu]

Signaler
Messages postés
119
Date d'inscription
dimanche 30 septembre 2007
Statut
Membre
Dernière intervention
11 août 2010
-
Messages postés
119
Date d'inscription
dimanche 30 septembre 2007
Statut
Membre
Dernière intervention
11 août 2010
-
salut, bon voila je veux mettre les chaine de caractére d'un fichier dans un autre fichier, j'utilise le code suivant :

#include <string>
#include <fstream>
#include
#include <string.h>
#include <fstream.h>
#include

void main()
{
std::ofstream h("test.txt",ios ::out);

std::ifstream fichier( "proto.txt" );

if ( fichier )
{
std::string ligne;

while ( std::getline( fichier, ligne ) )

{
h<< "test"<< ligne <<std::endl;
}

}

fichier.close();
h.close();
}

ma question c'est :
est ce qu'il ya une façon pour choisir les chaire de caractére qu'on veux affiché, un truc comme donné la position de la chaine qu'on veux affiché.
NB: j'ai cherché dans google mais je n'ai pas trouvé grand chose
merçi d'avance 

maximus

16 réponses

Messages postés
14824
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
29 septembre 2020
92
Ah bah oui, c'est beaucoup plus clair...et beaucoup plus complexe que je ne pensais...
Effectivement, ce n'est pas idiot de séparer ton problème...mais tu ne le sépares pas de la bonne manière je pense.

Pour moi, les étapes de ton processus sont les suivantes:
- lecture du fichier
  - pour chaque ligne, stockage des "mots" de la ligne (on peut imaginer un vecteur de vecteur de mots)
- pour chaque ligne
  - interprétation des mots (typiquement, ton dernier message)
    - si 5e mot == M,
      - le remplacer par 1
      - insérer une nouvelle ligne et mettre 2 dans le 5e mot
    - si 6e mot comprend un slash
      - récupération des 2 sous-mots
      - remplacer le 6e mot par le 1er sous-mot trouvé
      - insérer une nouvelle ligne et remplacer le 6e mot par le 2e sous-mot
....

Je te laisse compléter l'algo.
Je te conseille TRES FORTEMENT d'écrire ton algo avant toute ligne de code: ça permet de voir où tu vas et où tu es rendu...

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
119
Date d'inscription
dimanche 30 septembre 2007
Statut
Membre
Dernière intervention
11 août 2010

bein voila j'ai trouvé la solution, je l'admet c'été about du nez !!

#include <string>
#include <fstream>
#include
using namespace std;
int main()
{
    ifstream fichier("proto.txt");
    ofstream sortie("test.txt");
    if (fichier)
    {
        string ligne;
        while (getline(fichier,ligne))
        {
            // Récupération 1er champ et écriture dans le fichier
            size_t pos0=ligne.find_first_of(";");
   
            sortie << ligne.substr(0,pos0) << " " << endl;


            // Récupération 2e champ et écriture dans le fichier
            size_t pos1=ligne.find_first_of(";",pos0+1);
           
   sortie << ligne.substr(pos0+1,pos0+1-pos0) << endl;


   // Récupération 3e champ et écriture dans le fichier
   size_t pos2=ligne.find_first_of(";",pos1+1);
            sortie << ligne.substr(pos1+1,pos2-pos1-1) << endl;


   // Récupération 4e champ et écriture dans le fichier
   size_t pos3=ligne.find_first_of(";",pos2+1);
            sortie << ligne.substr(pos2+1,pos2-2-pos1) << endl;


   // Récupération 5e champ et écriture dans le fichier
   size_t pos4=ligne.find_first_of(";",pos2+1);
            sortie << ligne.substr(pos3+1,pos3+1-pos0+1) << endl;
        }
    }


    fichier.close();
    sortie.close();
}




maximus
Messages postés
14824
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
29 septembre 2020
92
Salut (oui, je persévère :),
Il est, bien entendu, tout à fait possible d'écrire ce que tu veux dans un fichier: soit une chaine entière, soit un caractère, un chiffre,...
Là encore, pas de fonction miracle. En gros (je dis bien "en gros", ça demande adaptation...), dans le code que tu avais pour découper tes lignes, tu remplace le "cout" par ton fichier de sortie. Ensuite, à toi d'ajouter les tests qui vont bien pour n'écrire que ce que tu as besoin.

"j'ai cherché dans Google..." --> hum...une recherche sur le forum te montrera comment écrire dans un fichier

Rmq: évite les doublons de topic et les sujet genre "à l'aide" ou "urgent": c'est les derniers topics que les habitués du forum vont regarder (y'en a beaucoup trop)...

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
119
Date d'inscription
dimanche 30 septembre 2007
Statut
Membre
Dernière intervention
11 août 2010

salut, ça fait plaisir que tu fais un signe de vie :p
ok, je vais voir.
pour les topic je le savais pas, je suis un nouveau dans les forum d'enrtaide
merçi pr les conseils
maximus
Messages postés
119
Date d'inscription
dimanche 30 septembre 2007
Statut
Membre
Dernière intervention
11 août 2010

dis, ya pas une fonction en c++ qui me permet de donné la position du mot dans chaque ligne dans le fichier d'entré puis le metre dans le fichier de sortie!!
maximus
Messages postés
119
Date d'inscription
dimanche 30 septembre 2007
Statut
Membre
Dernière intervention
11 août 2010

fichier de debart

4100 M RFRPAD8/A8 2063à2093 12361
2000 A RFRPAA8 2094à2124 52443

resultat attendu :

4100 12361 2063à2093 RFRPAD8/A8
2000 52443  2094à21241 RFRPAA8

maximus
Messages postés
119
Date d'inscription
dimanche 30 septembre 2007
Statut
Membre
Dernière intervention
11 août 2010

j'ai eséyé avec ce code mais j'ai un erruer quelque part !!

#include <string>
#include <fstream>
#include
#include <string.h>
#include <fstream.h>
#include




void main()
{
 
 
 
 
 std::ofstream h("test.txt",ios ::out);


 std::ifstream fichier( "tab.csv" );


  if ( fichier )
   
  { std::istringstream stream1;
   std::string a,b,c,d,e;
   
   std::string ligne;
   stream1.str(ligne);


   while ( std::getline( fichier, ligne ) )


   {




    h<

maximus
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
30 août 2012
16
Peut être à cause des a, b, c, d, et e qui ne sont pas initialisé mais qui sont écrit dans le fichier de sortie.
Messages postés
119
Date d'inscription
dimanche 30 septembre 2007
Statut
Membre
Dernière intervention
11 août 2010

non, il sont deja declaré

std::string a,b,c,d,e;

maximus
Messages postés
119
Date d'inscription
dimanche 30 septembre 2007
Statut
Membre
Dernière intervention
11 août 2010

les errur que j'obtien

error C2079: 'stream1' uses undefined class 'basic_istringstream<char,struct std::char_traits<char>,class std::allocator<char> >'

error C2228: left of '.str' must have class/struct/union type

maximus
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
30 août 2012
16
C'est bien ce que je dis ils sont déclarés mais ils ne sont pas initialisés, tu ne leur attribues pas de valeurs.
Messages postés
119
Date d'inscription
dimanche 30 septembre 2007
Statut
Membre
Dernière intervention
11 août 2010

je doit les inisialisé cmt ?!!!

maximus
Messages postés
14824
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
29 septembre 2020
92
Mais pourquoi utilises-tu des istringstream?? Apprends déjà à manipuler des string toutes simples!!

std::string ligne;
stream1.str(ligne);
--> aucun intérêt ces 2 lignes...surtout que la 2e n'est pas bonne (je ne comprends même pas ce que tu veux faire)

h< que valent a, b, c,....? Rien! Que tu veuille afficher des string, ok, mais mince! un peu de jugeotte!! y'a rien dans les strings, là!

Tu as un problème, tu ne sais pas quoi faire pour le résoudre, tu ne sais pas expliqué ton problème, tu recopies des bouts de code que tu trouves à droite et à gauche...et tu t'étonnes que cela ne marche pas?

Au risque de me répéter, poses ton problème une bonne fois pour toute! Tu perds un temps précieux, et tu nous en fait perdre parce qu'on arrive pas à cerner ton souci...

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
119
Date d'inscription
dimanche 30 septembre 2007
Statut
Membre
Dernière intervention
11 août 2010

bein voila mon problém, c juste que j'ai esséyé de le traité en partie !!

j'ai un fichier dans une base de donné que j'extracte en fichier exel puis je le met en format csv parsque avec le format txt je perd la mise en page :

OPC 12361


Opérateur DESTINATION DPC SENS CDFX  CIC
FT  PARIS PT5 4249 M RFRPAD8/A8 1à2
FT  PARIS PT5 4249 D RFRPAD7  1à3
FT  PARIS PT5 4249 A RFRPAA7  1à4


et je veux avoir un programme qui me permet d'ecrir dans un autre fichier pour avoir le resultat suivant :

DCP OPC CIC Way Trunk Switch
4249 12361 1 0 RFRPAD8 paris
4249 12361 2 0 RFRPAD8 paris
4249 12361 1 1 RFRPAA8 paris
4249 12361 2 1 RFRPAA8 paris
4249 12361 1 0 RFRPAD7 paris
4249 12361 2 0 RFRPAD7 paris
4249 12361 3 0 RFRPAD7 paris 
4249 12361 1 1 RFRPAA7 paris
4249 12361 2 1 RFRPAA7 paris
4249 12361 3 1 RFRPAA7 paris
4249 12361 4 1 RFRPAA7 paris 

j'espére que j'été claire cette fois !!




maximus
Messages postés
119
Date d'inscription
dimanche 30 septembre 2007
Statut
Membre
Dernière intervention
11 août 2010

DCP OPC CIC Way Trunk Switch
4249 12361 1 0 RFRPAD8 paris
4249 12361 2 0 RFRPAD8 paris

Trunk = CDFX
Way = SENS

le CIC doit eclaté
1à2
devien
1
2

le CDFX
 RAZRYA8/D8
s'ecrit
RAZRYA8
RAZRYD8

le SENS
A = 0
D = 1
M = A et D




maximus
Messages postés
119
Date d'inscription
dimanche 30 septembre 2007
Statut
Membre
Dernière intervention
11 août 2010

ok, tnx pour les conseils.
maximus