Clipper, caractère chr(26) et fichier txt
Fermé
benguigui1
Messages postés
26
Date d'inscription
jeudi 28 octobre 2004
Statut
Membre
Dernière intervention
13 septembre 2006
-
24 janv. 2005 à 11:18
bernard mouille - 26 juin 2005 à 20:40
bernard mouille - 26 juin 2005 à 20:40
A voir également:
- Clipper, caractère chr(26) et fichier txt
- Caractère ascii - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Caractere speciaux - Guide
8 réponses
C'est sans doute un retour chariot qui pose le problème. Sous windows le retour chariot c'est CR-LF ("\n\r") et sous unix c'est juste un CR. J'aurais tendance à dire que le format universellement utilisé c'est le format unix et donc ton programme plante parce que le dernier caractère est un "\r" (affiché "^M" dans certains éditeurs). Les logiciels que tu utilises me sont totalement inconnus. Je ne peux donc te proposer qu'une solution de dernier recours : supprimer le dernier caractère de ton fichier au moment de l'utiliser pour le concatener... :) Mais ce genre de problèmes est archi récurrent et tes logiciels doivent avoir prévu une option pour le format des retours chariots (format windows ou unnix par exemple).
benguigui1
Messages postés
26
Date d'inscription
jeudi 28 octobre 2004
Statut
Membre
Dernière intervention
13 septembre 2006
6
24 janv. 2005 à 13:30
24 janv. 2005 à 13:30
en fait il s'agirait d'un caractere de fin de fichier. c'est une appli DOS qui tourne sur des postes windows xp. D'apres ce que j'ai pu lire ici et là il s'agit d'un comportement normal...
Merci pour ta reponse
Merci pour ta reponse
benguigui1
Messages postés
26
Date d'inscription
jeudi 28 octobre 2004
Statut
Membre
Dernière intervention
13 septembre 2006
6
24 janv. 2005 à 14:30
24 janv. 2005 à 14:30
J'ai trouvé une solution qui fait un peu "bricolage"...
si ca interesse qqn la voici :
USE table
COPY TO fic1.TXT SDF
use
car="a"
eof=chr(26) && caractere à supprimer
entree=Fopen("fic1.txt") && fichier ayant le caractere a supprimer
sortie=Fcreate("fic2.txt") && fichier de sortie definitif
do while(Fread(entree,@car,1)>0)
if car != eof
fwrite(sortie,car)
endif
enddo
fclose(sortie)
fclose(entree)
delete file "fic1.txt"
si vous avez une solution plus élégante je suis preneur.
merci.
si ca interesse qqn la voici :
USE table
COPY TO fic1.TXT SDF
use
car="a"
eof=chr(26) && caractere à supprimer
entree=Fopen("fic1.txt") && fichier ayant le caractere a supprimer
sortie=Fcreate("fic2.txt") && fichier de sortie definitif
do while(Fread(entree,@car,1)>0)
if car != eof
fwrite(sortie,car)
endif
enddo
fclose(sortie)
fclose(entree)
delete file "fic1.txt"
si vous avez une solution plus élégante je suis preneur.
merci.
C'est quoi comme langage ? Tu ne peux pas ouvrir ton fichier en mode "modification" ? Y'arait d'autres solutions qui consisteraient à réécrire uniquement les "N-1" octets de ton fichier source mais si ça marche alors c'est bon.
Par contre, quelqu'un pourrait-il m'expliquer cette histoire de caractère de fin de fichier ? Je pensais que chaque fichier avait obligatoirement ce caractère à la fin mais apparemment ce n'est pas le cas ?
Par contre, quelqu'un pourrait-il m'expliquer cette histoire de caractère de fin de fichier ? Je pensais que chaque fichier avait obligatoirement ce caractère à la fin mais apparemment ce n'est pas le cas ?
Bonjour,
A propos de bricole, essaye donc un peu ce petit programme pour des champs caractères, numériques et date.
ENTREEDBF="FICHIER.DBF"
SORTIETXT=FCREATE("Stxt.TXT")
USE &ENTREEDBF
I=1
DO WHILE .T.
IF TYPE(FIELD(I))<>"C"
EXIT
ENDIF
I=I+1
ENDDO
DO WHILE .NOT. EOF()
V=""
J=1
DO WHILE J<I+2
Y=FIELD(J)
W=&Y
DO CASE
CASE TYPE("W")="D"
X=DTOC(W)
CASE TYPE("W")="N"
X=STR(W)
OTHER
X=W
ENDCASE
V=V+X+SPACE(1)
J=J+1
ENDDO
FWRITE(SORTIETXT,V+CHR(10))
SKIP
ENDDO
USE
FCLOSE(SORTIETXT)
RETURN
Bonne journée.
b.m.
A propos de bricole, essaye donc un peu ce petit programme pour des champs caractères, numériques et date.
ENTREEDBF="FICHIER.DBF"
SORTIETXT=FCREATE("Stxt.TXT")
USE &ENTREEDBF
I=1
DO WHILE .T.
IF TYPE(FIELD(I))<>"C"
EXIT
ENDIF
I=I+1
ENDDO
DO WHILE .NOT. EOF()
V=""
J=1
DO WHILE J<I+2
Y=FIELD(J)
W=&Y
DO CASE
CASE TYPE("W")="D"
X=DTOC(W)
CASE TYPE("W")="N"
X=STR(W)
OTHER
X=W
ENDCASE
V=V+X+SPACE(1)
J=J+1
ENDDO
FWRITE(SORTIETXT,V+CHR(10))
SKIP
ENDDO
USE
FCLOSE(SORTIETXT)
RETURN
Bonne journée.
b.m.
benguigui1
Messages postés
26
Date d'inscription
jeudi 28 octobre 2004
Statut
Membre
Dernière intervention
13 septembre 2006
6
24 janv. 2005 à 14:53
24 janv. 2005 à 14:53
C'est un langage qui ressemble à DBase 3 et fox pro. L'appli sur laquelle je travaille a ete developpée en 85, ca te donne une idee...
Je devais creer un fichier txt à partir du contenu d'une table de la base de donnees.
Apparemment, la commande utilisée pour cela insere un caractere de fin de fichier (chr(26)).
Ce qui m'etonne un peu (beaucoup même...) c'est que cela ne semblait pas etre le cas dans la version precedente de l'appli...
Alors est ce que cela vient du fait que je teste l'appli sous windows, je ne sais pas...
La solution que j'ai trouvée est temporaire car je suis sur qu'il y a autre chose à faire... je continue à chercher.
Je devais creer un fichier txt à partir du contenu d'une table de la base de donnees.
Apparemment, la commande utilisée pour cela insere un caractere de fin de fichier (chr(26)).
Ce qui m'etonne un peu (beaucoup même...) c'est que cela ne semblait pas etre le cas dans la version precedente de l'appli...
Alors est ce que cela vient du fait que je teste l'appli sous windows, je ne sais pas...
La solution que j'ai trouvée est temporaire car je suis sur qu'il y a autre chose à faire... je continue à chercher.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
J'ai fait une erreur, voici le programme :
ENTREEDBF="Fichier.DBF"
SORTIETXT=FCREATE("Stxt.TXT")
USE &ENTREEDBF
I=1
V=""
DO WHILE .T.
IF TYPE(FIELD(I))="U"
EXIT
ENDIF
V=V+FIELD(I)+";"
I=I+1
ENDDO
FWRITE(SORTIETXT,V+CHR(10))
DO WHILE .NOT. EOF()
V=""
J=1
DO WHILE J<I
Y=FIELD(J)
W=&Y
DO CASE
CASE TYPE("W")="D"
X=DTOC(W)
CASE TYPE("W")="N"
X=STR(W)
OTHER
X=W
ENDCASE
V=V+X+";"
J=J+1
ENDDO
FWRITE(SORTIETXT,V+CHR(10))
SKIP
ENDDO
USE
FCLOSE(SORTIETXT)
RETURN
Avec mes excuses,
Bonne soirée
BM
ENTREEDBF="Fichier.DBF"
SORTIETXT=FCREATE("Stxt.TXT")
USE &ENTREEDBF
I=1
V=""
DO WHILE .T.
IF TYPE(FIELD(I))="U"
EXIT
ENDIF
V=V+FIELD(I)+";"
I=I+1
ENDDO
FWRITE(SORTIETXT,V+CHR(10))
DO WHILE .NOT. EOF()
V=""
J=1
DO WHILE J<I
Y=FIELD(J)
W=&Y
DO CASE
CASE TYPE("W")="D"
X=DTOC(W)
CASE TYPE("W")="N"
X=STR(W)
OTHER
X=W
ENDCASE
V=V+X+";"
J=J+1
ENDDO
FWRITE(SORTIETXT,V+CHR(10))
SKIP
ENDDO
USE
FCLOSE(SORTIETXT)
RETURN
Avec mes excuses,
Bonne soirée
BM
benguigui1
Messages postés
26
Date d'inscription
jeudi 28 octobre 2004
Statut
Membre
Dernière intervention
13 septembre 2006
6
20 juin 2005 à 13:53
20 juin 2005 à 13:53
Merci Bernard.
de rien,
ce petit programme me permet de tranférer les données DBF dans EXCEL qui a la possibilité de transformer les caractères DOS au format WINDOWS.
Bonne soirée
BM
ce petit programme me permet de tranférer les données DBF dans EXCEL qui a la possibilité de transformer les caractères DOS au format WINDOWS.
Bonne soirée
BM
benguigui1
Messages postés
26
Date d'inscription
jeudi 28 octobre 2004
Statut
Membre
Dernière intervention
13 septembre 2006
6
20 juin 2005 à 19:00
20 juin 2005 à 19:00
bonsoir ,
ça me fait penser à un autre problème : lorsque je voulais modifier mes tables sous excel, au moment d'enregistrer ces tables j'avais un message (je ne me souviens plus exactement, désolé) qui me parlait d'un probleme de compatibilité entre db4 et excel avec impossibilité d'enregistrer ; si bien que le seul moyen que j'avais etait de les ouvrir avec visual fox ?! de faire les modif et d'enregistrer
c'est etrange.
Est ce que cela vous dit qqchose ? (je reconnais que cette description du probleme laisse à desirer ms je n'ai plus les sources et suis passé à un autre projet)...
merci, pour toutes ces reponses
ça me fait penser à un autre problème : lorsque je voulais modifier mes tables sous excel, au moment d'enregistrer ces tables j'avais un message (je ne me souviens plus exactement, désolé) qui me parlait d'un probleme de compatibilité entre db4 et excel avec impossibilité d'enregistrer ; si bien que le seul moyen que j'avais etait de les ouvrir avec visual fox ?! de faire les modif et d'enregistrer
c'est etrange.
Est ce que cela vous dit qqchose ? (je reconnais que cette description du probleme laisse à desirer ms je n'ai plus les sources et suis passé à un autre projet)...
merci, pour toutes ces reponses
benguigui1
Messages postés
26
Date d'inscription
jeudi 28 octobre 2004
Statut
Membre
Dernière intervention
13 septembre 2006
6
>
bernard mouille
21 juin 2005 à 09:04
21 juin 2005 à 09:04
Bonjour,
merci encore.
J'aurai l'occasion de mettre en oeuvre cette solution car je vais retravailler sur cete appli en octobre.
bonne journée.
merci encore.
J'aurai l'occasion de mettre en oeuvre cette solution car je vais retravailler sur cete appli en octobre.
bonne journée.
bernard mouille
>
benguigui1
Messages postés
26
Date d'inscription
jeudi 28 octobre 2004
Statut
Membre
Dernière intervention
13 septembre 2006
26 juin 2005 à 20:40
26 juin 2005 à 20:40
Bonsoir Benguigui1
Si ça peut t'intéresser, j'ai fait un petit programme pour transformer un fichier.dbf en fichier HTM, avec possibilité de test.
Tu le trouvera sur : http://bernard.mouille.free.fr/
Si tu connais des caractères de transformation supplémentaires, donnes-les moi si tu veux et je les rajouterai.
Bonne soirée
BM
Si ça peut t'intéresser, j'ai fait un petit programme pour transformer un fichier.dbf en fichier HTM, avec possibilité de test.
Tu le trouvera sur : http://bernard.mouille.free.fr/
Si tu connais des caractères de transformation supplémentaires, donnes-les moi si tu veux et je les rajouterai.
Bonne soirée
BM
De rien ...
Par contre, est-ce que tu as déjà réussi à gérer les API de WINDOWS (récupération des programmes des fichiers .DLL) avec CLIPPER 5.2 ?
Moi, je n'ai pas trouvé de solutions, heureusement, j'ai dBase DB2K avec compilateur et je passe mon temps à faire des ponts.
J'aimerai bien pouvoir le faire en Clipper 5.2 (je n'ai pas le 5.3) car j'ai une fiabilité supérieure pour mes utilisateurs, malgrès quelques problèmes (LOCATE dans une boucle bouffe la ressource en XP).
Si quelqu'un d'autre a une idée ...
Merci d'avance.
Bonne soirée,
B.M.
Par contre, est-ce que tu as déjà réussi à gérer les API de WINDOWS (récupération des programmes des fichiers .DLL) avec CLIPPER 5.2 ?
Moi, je n'ai pas trouvé de solutions, heureusement, j'ai dBase DB2K avec compilateur et je passe mon temps à faire des ponts.
J'aimerai bien pouvoir le faire en Clipper 5.2 (je n'ai pas le 5.3) car j'ai une fiabilité supérieure pour mes utilisateurs, malgrès quelques problèmes (LOCATE dans une boucle bouffe la ressource en XP).
Si quelqu'un d'autre a une idée ...
Merci d'avance.
Bonne soirée,
B.M.