ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

classe mergeFile   



L'auteur

FredA
France France
Membre Simple
# 0000000005
enregistré le 12/10/2004

Fiche personnelle


Note des membres
1/20
1 vote


Contributions > 01 - PRG : Programmation

classe mergeFile
# 0000000181
ajouté le 28/04/2005 17:50:16 et modifié le 28/04/2005
consulté 9065 fois
Niveau débutant

Version(s) Foxpro :
VFP 9.0
VFP 8.0
VFP 7.0
VFP 6.0

Description
pour copier bout à bout des fichiers...
exemple didactique de manipulation de fichiers bas niveau et pour faire plus de 7 lignes de code ;)
Code source :
m.mf=CREATEOBJECT("mergeFile")
m.mf.addFile()
m.mf.addFile()
m.mf.merge()

#define nblocksize 1024*100

DEFINE CLASS mergeFile as Custom
  DIMENSION aFiles[1]
  aFiles[1]=.F.
  nbFiles=0

  cFile=""

  FUNCTION Init
    this.aFiles[1]=.F.
  ENDFUNC

  FUNCTION AddFile
  LPARAMETERS lcPath
  IF EMPTY(lcPath)
    lcPath=GETFILE("txt","Ajouter")
    IF EMPTY(lcPath)
      RETURN
    ENDIF
  ENDIF

  IF FILE(lcPath)
    this.nbFiles = this.nbFiles + 1
    DIMENSION this.aFiles[this.nbFiles]
    this.aFiles[this.nbFiles]=lcPath
  ENDIF
  ENDFUNC

  FUNCTION Merge
    LOCAL handle
    IF EMPTY(this.cFile)
      this.cFile=PUTFILE("Fichier cible","result","txt")
    ENDIF
    IF FILE(this.cFile)
      handle=FOPEN(this.cFile,12)
    ELSE
      handle=FCREATE(this.cFile)
    ENDIF
    IF handle<=0
      RETURN
    ENDIF
    =FSEEK(m.handle,0,0)
    FOR li=1 TO this.nbFiles
      m.htmp=FOPEN(this.afiles[li])
      =FSEEK(m.htmp,0,0)
      DO WHILE .T.
        m.buf=FREAD(htmp, nblocksize)
        m.nread=LEN(m.buf)
        IF SUBSTR(m.buf, m.nread, 1)=CHR(26)
          m.buf=LEFT(m.buf, m.nread-1)
        ENDIF
        =FWRITE(handle, m.buf)
        IF nread<nblocksize
          EXIT
        ENDIF
      ENDDO
      FCLOSE(htmp)
    ENDFOR

    =FCLOSE(handle)
  ENDFUNC

ENDDEFINE

Commentaires
le 28/04/2005, FredA a écrit :
Mike, tu me fais la même en windows scripting pour le fun ? <s>
le 28/04/2005, Thierry a écrit :
Fred, tu nous la refais sous forme d'une FLL en C++, pour le fun ?
le 28/04/2005, FredA a écrit :
hm.. là c'est plutot Francis le spécialiste MDR !!!
le 28/04/2005, Thierry a écrit :
En l'absence de Mike :

oShell = CreateObject("Wscript.Shell")
oShell.Run ("cmd /c copy /b d:\in1.dat+d:\in2.bat d:\out.dat",2,.t.)

Ps : Ok, je sais, c'est de la triche, mais ça marche bien , non ?

le 29/04/2005, Francis Faure a écrit :
Fred,
Oui,
je peux te poster la même avec une FLL
;)
Mais
je ne vois toujours pas l'intérêt puisqu'un simple :
f1 = FiletoStr("fichier1.txt")
=StrToFile(f1, "fichier2.txt", 1)

on peut même faire mieux !!!!

=StrToFile(FiletoStr("fichier1.txt"), "fichier2.txt", 1)

coté commentaire sur ton source : tu n'aime pas l'indentation ?

le 29/04/2005, FredA a écrit :
J'ai bêtement (ça m'arrive;)) copié collé depuis vfp... il y avait des tabulations, a priori elles ne sont pas prise en compte...elles réapparaissent bien si je demande à modifier le source.
le 29/04/2005, FredA a écrit :
je rappelle que le but initial était de s'affranchir de la limite imposée par le filetostr.
le 12/12/2006, Zeus_Jupiter a écrit :
et comment on demerge ?

www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2024.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0-SP2-HF3