Prob ecriture .txt

Résolu
brice45
Messages postés
14
Date d'inscription
mercredi 23 mai 2007
Statut
Membre
Dernière intervention
13 août 2007
- 30 mai 2007 à 14:00
brice45
Messages postés
14
Date d'inscription
mercredi 23 mai 2007
Statut
Membre
Dernière intervention
13 août 2007
- 1 juin 2007 à 10:30
Bonjour,


J'ai un fichier .txt de cette forme


495.27000..........A
495.32000..........B
495.37000..........C
495.42000..........D


Et je voudrai que la première valeurs (Ici 495.27000) soit remplacer par 1
La deuxième par 2
pour que ca me donne




1...............A
2...............B
3...............C
4...............D 

Merci

7 réponses

BruNews
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
19
30 mai 2007 à 19:24
Lire "ligne par ligne" est un non sens complet, c'est une ballade permanente du pointeur de fichier, contre productif absolu.

Projet de test suivant format de fichier fourni.
http://brunews.com/Brice.zip

#define _WIN32_WINNT 0x0600
#define _WIN32_IE 0x0700
#include <windows.h>
#include "bnIntA.h"


#define MEMDISPO    (MEM_COMMIT | MEM_RESERVE | MEM_TOP_DOWN)
#define LINESIZE    22


char szfile[] = "Brc.txt";


void __stdcall RefaitFichier()
{
  BYTE *pmem, *c, *d;
  HANDLE hfl;
  DWORD v, i, len;
  hfl = CreateFile(szfile, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
  if(hfl == INVALID_HANDLE_VALUE) return;
  len = GetFileSize(hfl, 0);
  if(GetLastError()) goto flCLOSE;
  if(!len) goto flCLOSE; // FICHIER VIDE  i len / LINESIZE; // i NOMBRE DE LIGNES
  if(len % LINESIZE) goto flCLOSE; // FICHIER INCOHERENT
  pmem = (BYTE*) VirtualAlloc(0, len, MEMDISPO, PAGE_READWRITE);
  if(!pmem) goto flCLOSE;
  ReadFile(hfl, pmem, len, &v, 0);
  if(v != len) goto relMEM; // ERREUR LECTURE  d c pmem;
  len = 1;
fromFL:
  d = bnultoa(len++, d);
  c += 9;
  v = 13; // 13 OCTETS A INSERER
  do {
    *d++ = *c++;
  } while(--v);
  if(--i) goto fromFL;
  SetFilePointer(hfl, 0, 0, FILE_BEGIN);
  WriteFile(hfl, pmem, d - pmem, &v, 0);
  SetEndOfFile(hfl);
relMEM: VirtualFree(pmem, 0, MEM_RELEASE);
flCLOSE: CloseHandle(hfl);
}


#pragma comment(linker, "/entry:myWinMain")
__declspec(naked) void __stdcall myWinMain()
{
  __asm {
    call    RefaitFichier
    push    0
    call    dword ptr ExitProcess
  }
}

exe fait 2,5 Ko.

ciao...
BruNews, MVP VC++
3
Loki6
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
27 décembre 2009
2
30 mai 2007 à 16:20
salut,
tu peux récupérer une composition de ligne par sscanf(buffer,"%f %50s",&fparam,&strparam);
avec fparam un float, strparam un char *.

tu peux ensuite reconstituer ton fichier en ne récupérant que strparam et en mettant le nombre remplaçant voulu.

cela répond-il à ta question ?

Loki
0
brice45
Messages postés
14
Date d'inscription
mercredi 23 mai 2007
Statut
Membre
Dernière intervention
13 août 2007

30 mai 2007 à 16:28
hy loki
Qu'est ce que tenten par récupération de ligne...
je vais testé...
0
Loki6
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
27 décembre 2009
2
30 mai 2007 à 17:04
si tu peux lire ton fichier texte ligne par ligne, (c'est l'idéal) alors pour chaque ligne que tu stockes dans un buffer (ni plus ni moins qu'un char *) tu peux récupérer les infos par type avec la fonction sscanf() cf. MSDN.

Loki
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Loki6
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
27 décembre 2009
2
30 mai 2007 à 19:59
Loki
0
brice45
Messages postés
14
Date d'inscription
mercredi 23 mai 2007
Statut
Membre
Dernière intervention
13 août 2007

31 mai 2007 à 11:22
Merci BruNews!!!


Mais ca a l'aire super compliqué....


Mais du moment que ca marche...
0
brice45
Messages postés
14
Date d'inscription
mercredi 23 mai 2007
Statut
Membre
Dernière intervention
13 août 2007

1 juin 2007 à 10:30
bien joué juste brucenews!!
ca marche....

C ca la classe....
;-)
0