begin process at 2012 05 29 08:05:50
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Fichier / Disque

 > 

Manipulation d'un fichier formatté spécial


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

Manipulation d'un fichier formatté spécial

dimanche 24 octobre 2004 à 12:01:52 | Manipulation d'un fichier formatté spécial

jb60

Bonjour,

Je suis entrain d'essayer de faire un petit programme qui me sera utile dans mon travail.
J'ai un fichier qui se nomme "fichier.raw" avec des données écrites en texte sur lequel je voudrais récupérer quelques valeurs.
En fait, ça fait un petit bout de temps que j'essaye, mais j'ai beaucoup de mal à faire un programme pour pouvoir manipuler les données que je veux.
Ce que je voulais faire, c'est faire appel à votre grand sens de programmateurs avertis et surtout habitués, voir professionnels pour m'aider un peu...

Je vais donc vous mettre un fichier type que j'obtiens, et vous dire les données que je souhaite récupérer!
Le fichier type contient:

//début du fichier à la ligne suivante:
>Controller # 86: galvanostatic channel # 8
>Username:
>Acquisition started on: Dim 7 f´v 1904 16:36
>Saved on file: jb106a_8.RAW
>Cell description: jb106 Cu0,3 pur C/20 0,1-2 red
>Mass of active material: 5.100 mg weighted at x = 0.000
>Molecular weight of active material(at x = 0): 51.811 g
>Atomic weight of intercalated ion: 6.941 g
>Acquisition started at xo = 0.000
>Number of e- transferred per intercalated ion: 1
>(For Æx = 1, ÆQ = 2.638 mAh)
>Æx max allowed on a sweep: 3.000 (ÆQmax=7.915 mAh)
>No amplifier (Imax>=10.0 mA)
>No Uaux recording
>Test Uwrk
>
> Relaxation (same as below)
>
> Do 200 sweep(s)
>
> While Ueq>0.120V (red) or Ueq<1.980V (ox)
> or |ÆQ|<ÆQmax
>
>Set I at -0.1325mA,60.000h (odd) or 0.1325mA,60.000h (even)
> Curtail if U<0.100V (red) or U>2.000V (ox)
> or if |Ueq-U|>1.900V or if |ÆQ|>ÆQmax
> Record 1 init. pt. +1 pt./0.005V +1 final pt.
>
> Relaxation: open circuit for 0.000h
> or until|ÆU/Æt|<|ÆUo/Æto|/60000 or |ÆU/Æt|<0.00 mV/h
> Record 1 init. pt. +1 pt./0.010V +1 final pt.
>
> Next sweep
>
>
>
>
>
>
>
Time/h Uwrk/V I/mA Error xo,x'(Q)
0.000 1.111 -0.000 0 0.000000
0.000 1.091 -0.1325 0 -3.790404e-1
0.003 1.061 -0.1325 0
0.006 1.051 -0.1325 0
0.008 1.044 -0.1325 0
0.011 1.038 -0.1325 0
1.664 0.141 0.1325 0
1.667 0.221 0.1325 0
1.669 0.261 0.1325 0
5.311 1.356 -0.1325 0
5.314 1.331 -0.1325 0
5.317 1.307 -0.1325 0
5.319 1.287 -0.1325 0
5.322 1.267 -0.1325 0
//fin du fichier

En fait, je voudrais récupérer les valeurs suivantes:
>Mass of active material: 5.100 mg weighted at x = 0.000
dans cette ligne, il me faut 5.100 et 0.000
>Molecular weight of active material(at x = 0): 51.811 g
dans cette ligne, il me faut 51.811
>Atomic weight of intercalated ion: 6.941 g
dans cette ligne, il me faut 6.941
>Acquisition started at xo = 0.000
dans cette ligne, il me faut 0.000
>Number of e- transferred per intercalated ion: 1
dans cette ligne, il me faut 1
puis:
Time/h Uwrk/V I/mA Error xo,x'(Q)
0.000 1.111 -0.000 0 0.000000
0.000 1.091 -0.1325 0 -3.790404e-1
0.003 1.061 -0.1325 0
0.006 1.051 -0.1325 0
0.008 1.044 -0.1325 0
0.011 1.038 -0.1325 0
1.664 0.141 0.1325 0
1.667 0.221 0.1325 0
1.669 0.261 0.1325 0
5.311 1.356 -0.1325 0
5.314 1.331 -0.1325 0
5.317 1.307 -0.1325 0
5.319 1.287 -0.1325 0
5.322 1.267 -0.1325 0

ici, il me faut ranger les données dans des colonnes, la première ligne étant les titres des colonnes (time/h, Uwrk/V, etc...)
et les lignes suivantes étant les données contenues dans chaques colonnes (valeurs séparées par des espaces), la colonne "x0,x'(Q)" n'étant donnée qu'en première et deuxième ligne...

Je voudrais faire appel à une âme charitable, qui voudrait bien m'aider à récupérer ces valeurs et les manipuler dans un projet Win32, soit simplement en m'aidant, soit en me donnant une méthode, soit en faisant une bonne partie du boulot (lol) pour que je puisse comprendre comment faire un truc dans le genre, soit à vous de voir.

En espérant que vous allez réussir à m'enlever cette épine du pied, j'attends vos réponses avec impatence.
Merci.

JB
mercredi 12 janvier 2005 à 21:26:14 | Re : Manipulation d'un fichier formatté spécial

otofraise

Bonjour,

Je viens de prendre connaissance de votre message.
Je ne sais pas si ma reponse vous sera encore utile, essayons tout de meme

Je vous conseillerai de realiser une fonction qui vous retournerai le texte trouve entre deux chaines de caracteres specifiees. Ce qui donnerai :

string ExtracChaine(FILE* Fichier, string ChaineAvant, string ChaineApres);

ensuite le principe est simple, vous lisez votre fichier caractere par caractere en les enregistrant dans une variable string. Sitot que votre string contient le meme nombre de caractere que ChaineAvant vous testez l'égalite entre la string obtenue et ChaineAvant.

Si ca correspond, vous n'avez plus qu'a enregistrer les caractere suivant jusqu'a trouve ChaineApres.

Dans le cas contraire, vous devez retirer le 1° caractere de la string obtenue et y ajouter le prochain caractere lu et refaire le test. Tout ca jusqu'a ce que vous trouviez la ChaineAvant ou la fin du fichier.

string ExtracChaine(FILE* Fichier, string ChaineAvant, string ChaineApres)
{
   char CaracLu;
   string ChaineTemp;
   string ValRet = "";
   bool Arret = false;

   if(Fichier)
   {
      while(!Arret)
      {
         if(!fread(&CaracLu, sizeof(CaracLu), 1, Fichier))
         {
            Arret = true;
         }
         else
         {         
            ChaineTemp += CaracLu;
            if(Trouve && ChaineTemp.find(ChaineApres))
            {
               ValRet = ChaineTemp.substring(0, ChaineTemp.length() - ChaineTemp.find(ChaineApres));
               Arret = true;
            }
            else if(ChaineTemp.length() == ChaineAvant.length())
            {
               if(ChaineTemp == ChaineAvant)
               {
                  Trouve = true;
                  ChaineTemp = "";
               }
               else
               {
                  ChaineTemp = ChaineTemp.substring(0, ChaineTemp.length() - 1);
               }
            }
         }
      }
   }

   return ValRet;
}

Je n'ai pas teste ce code, mais le principe doit etre bon.
Je n'ai pas non plus l'habitude d'utiliser les string (string.h) mais les fonctions doivent etre assez proches. Si vous travaillez avec les AnsiString de Borland ou un autre format de chaine de caractere "evoluee", vous adapterez facilement ce code.

En cas de probleme, n'hesitez pas

Oto
jeudi 13 janvier 2005 à 18:48:21 | Re : Manipulation d'un fichier formatté spécial

jb60

Tout d'abord, je tenais à vous remercier d'avoir répondu à ma question.
Le principe de votre fonction est pas mal, mais en fait, je ne m'en servirai pas, car, comme vous l'avez dit, je n'en ai plus besoin en ce moment....
En fait, j'ai réussi à faire quelque chose de pas mal, avec l'aide de djl il y a quelques temps maintenant!
Mais j'ai quand même lu votre méthode qui est relativement simple, et qui, je pense doit fonctionner parfaitement, même pour un prochain problème similaire, ça peut toujours servir... Er si ça ne sert pas à moi, peut être que ça pourra servir à quelqu'un d'autre!

Encore merci, et bonne continuation dans vos programmations.

JB


Cette discussion est classée dans : fichier, ligne, of, at, pt


Répondre à ce message

Sujets en rapport avec ce message

find_first_of("/"); probléme de recupuration d'une chaine de caractére dans une ligne [ par yanlou ] salut, svp si quelqu'un peux m'aidé, pour récupuré une chaine de caracté dans une ligne, le probléme c'est qu'il ya des critéreexemple de la chaine de Comment récupérer la deuxième colonne d'un fichier .txt en C++.NET [ par zebulon88 ] Bonjour à tous,Je n'arrive pas à récupérer la deuxième colonne (séparé par une tab de la première colonne) d'un fichier .txt en C++.NET et à la mettre Chercher un string dans un fichier texte ? [ par chtitpierre78 ] Bonjour,Je développe actuellement un outils en C++ (VisualC++) qui me permet de comparer 2 fichiers textes (.txt) d'environ 4Mo chacun (soit environ 6 Comment sauter une ligne ds un WriteFile() [ par dante20007 ] Bonjour, j'utilise la fonction Windows WriteFile() pour écrire dans un fichier.Cependant je  voudrais intégrer un saut de ligne à la fin de mes donnée lire une variable dans un fichier [ par momoko94 ] Bonjour, voila le problème, je voudrais rechercher dans un fichier le nombre d'etudinats d'une ville et l'afficher.typedef struct{    char nom_ville[3 parser un fichier xml avec tinyxml [ par rabebs ] Bonjour tout le monde Je cherche à récupérer des valeurs des balises se trouvant sous d'autres balises comme:<pre class="alt2" dir="ltr" style="border fichiers en C [ par boualiasma ] Salut, 1) Dans mon travail, j'utilise des fichiers. je crée un fichier "essai.txt" pour le remplir fp = fopen("essai.txt","w"); // je fais des tra fichier en c [ par gabsi08aymen ] bonjour, je dois ecrire en c dans un fichier *.txt par des lignes dont chacune contient des informations de meme type ; le probleme c ke je veux a cha probleme pour ouvrir un fichier .csv [ par lenanttais44 ] Bonjour, j'ai un probleme, je dois faire un programme pour ouvrir un fichier .csvSi je met l'extension .txt, je n'ai aucun probleme, le programme fonc Problème écriture fichier [ par pitidragon ] Bonjour à tous !J'ai besoin d'aide pour finaliser un projet pour la fac. Je dois réaliser un démineur, et j'ai un petit soucis pour finir. Je dois gér


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

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 : 0,421 sec (4)

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