Prob ecriture .txt [Résolu]

Signaler
Messages postés
14
Date d'inscription
mercredi 23 mai 2007
Statut
Membre
Dernière intervention
13 août 2007
-
Messages postés
14
Date d'inscription
mercredi 23 mai 2007
Statut
Membre
Dernière intervention
13 août 2007
-
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

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
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++
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
27 décembre 2009
2
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
Messages postés
14
Date d'inscription
mercredi 23 mai 2007
Statut
Membre
Dernière intervention
13 août 2007

hy loki
Qu'est ce que tenten par récupération de ligne...
je vais testé...
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
27 décembre 2009
2
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
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
27 décembre 2009
2
Loki
Messages postés
14
Date d'inscription
mercredi 23 mai 2007
Statut
Membre
Dernière intervention
13 août 2007

Merci BruNews!!!


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


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

bien joué juste brucenews!!
ca marche....

C ca la classe....
;-)