Code retour FWRITE

herve95bis Messages postés 4 Date d'inscription dimanche 1 mai 2011 Statut Membre Dernière intervention 13 mai 2011 - 1 mai 2011 à 14:28
michelatoutfox Messages postés 828 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 7 mai 2013 - 13 mai 2011 à 18:44
Bonjour ,

Débutant Foxpro ET débutant sur les forums...

mes excuses par avance.

Je voudrais connaitre la signification des codes retours de FWRITE.
Je n'arrive pas à écrire dans le fichier que je viens de créer.
si dessous , le code :

FUNCTION LIGFA
LPARAMETER enreg,TypLig,ficpaq
LOCAL toto, FAfic, l_cr

FAfic = ficpaq + Typlig + "FA0000.PAQ"
? " fichier en sortie : ", FAfic

l_cr=FOPEN(FAfic,0)

IF l_cr = -1
? " fichier à créer : ", l_cr
l_cr=FCREATE(FAfic,0)
ELSE
? " Fichier déjà crée : ", l_cr , " ", FAfic
ENDIF

* WAIT 'Cannot open or create output file' WINDOW

toto = FWRITE(l_cr,enreg)
? " code retour de fwrite : ", toto

FCLOSE(Fafic)

La création est OK , mais rien dans le fichier


Merci et soyez indulgents

7 réponses

michelatoutfox Messages postés 828 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 7 mai 2013 1
1 mai 2011 à 16:42
Bonjour Hervé,

déjà, en ouvrant ton fichier avec FOPEN(FAfic, 0
), tu décides une ouverture en lecture seule!

ensuite, je pense que tu interprètes mal le retour -1 éventuel de ce FOPEN : si le fichier existe, mais ne peut pas être ouvert (par exemple il est ouvert et locké par un autre programme), alors tu pourras avoir un retour -1. Pour tester si le fichier existe, il vaut mieux passer par FILE(), ou bien par un appel à FSO.

Là, je suppose que ton FWRITE te renvoie 0 octets écrits dans un fichier qui existe déjà (normal, tu l'ouvres en lecture seule)

enfin, ton FCLOSE est mal écrit : ce n'est pas le nom du fichier que tu dois passer en paramètre, mais le handle obtenu à l'ouverture (donc pour toi l_cr).

Pour finir, une question : pourquoi as-tu besoin d'utiliser des fonctions de bas niveau? STRTOFILE ne conviendrait pas?
0
herve95bis Messages postés 4 Date d'inscription dimanche 1 mai 2011 Statut Membre Dernière intervention 13 mai 2011
2 mai 2011 à 08:04
bonjour Michel,

Merci pour ces réponses.

Je vais tester avec les modifs décrites.

Je pêche à droite et à gauche, je ne connait pas toutes les fonctions.

fonctions bas niveau ? je ne sais pas ce que çà veux dire !
0
michelatoutfox Messages postés 828 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 7 mai 2013 1
2 mai 2011 à 09:31
Bonjour,

Fox est écrit en C, et on appelle fonction de bas niveau les quelques fonctions qui sont directement reprises du C.

Ces fonctions concernent le traitement des fichiers, elles commencent par la lettre F. Par exemple FOPEN, FCREATE, FCLOSE, etc...

Il est rare d'avoir à les utiliser, la plupart du temps, on passe par des fonctions ordinaires.

Quand tu poses une question sur un forum, merci de préciser toujours la version de Fox que tu utilises (par exemple VFP9 SP2). Et comme tu débutes en fox, ça sera peut-être plus simple si tu nous expliques ce que tu cherches à faire, pas seulement comment, mais l'objectif. Par exemple ici, pourquoi veux-tu écrire cette fonction? dans quel cadre sera-t-elle utilisée?
0
herve95bis Messages postés 4 Date d'inscription dimanche 1 mai 2011 Statut Membre Dernière intervention 13 mai 2011
13 mai 2011 à 16:08
Bonjour,

pas toujours devant mon écran ...

Ce que je voudrais faire :
A partir d'un fichier .txt comportant pour chaque ligne un identifiant ( FA, CU, PR, DF, ....),je voudrais créer autant de fichiers que j'ai de type de ligne. Avec bien sur toutes les lignes de même type dans chaque fichier.

C'est à dire que pour un fichier en entrée comportant 5 types de lignes différentes, je voudrais en sortie 5 fichiers fichiers différents.

Chaque type de ligne comportant des informations diffentes, il sera plus facile de travailler sur un fichier ne comportant que les mêmes informations.


VFP 9.O XPPRO SP3
0

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

Posez votre question
michelatoutfox Messages postés 828 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 7 mai 2013 1
13 mai 2011 à 17:06
Bonjour,

comment est structuré ce fichier txt? quel est le contenu d'une ligne ? Quand tu dis que chaque type de ligne contient des informations différentes, tu veux dire que les structures des lignes sont différentes?

connais-tu à l'avance les identifiants possibles? comment repérer l'identifiant, il est en début de ligne? il est séparé du reste de la ligne par un caractère spécifique?

un exemple sur quelques lignes serait le bienvenu, et nous permettrait de te proposer des approches auxquelles tu n'as peut-être pas pensé.
0
herve95bis Messages postés 4 Date d'inscription dimanche 1 mai 2011 Statut Membre Dernière intervention 13 mai 2011
13 mai 2011 à 17:23
Bonjour,

Une structure de ligne par type de ligne. Type de ligne en début, sur deux ou trois caractères.
Séparateur de champ : Tabulation.
Pas forcement tous les types de lignes possibles dans un fichier.
Je connais tous les identifiants possibles.

Comment faire pour joindre un fichier ?

un petit exemple si dessous :

FA AL0A110 AL0A110 PULL SS MANCHE MAILLE CT 1 Acoté 4 F HAU PUL NAM PCE UNI MC GR M CN 0 ? ? UPUV False 3100000067083 3100000067083 3068 2 0 1 T01 10H AL0A PULL SS MANCHE MAILLE 0 0 0 0 0 0 745 0 0 0 MS 0
FA AL0A110 AL0A110 PULL SS MANCHE MAILLE CT 1 Acoté 4 F HAU PUL NAM PCE UNI MC GR M CN 0 ? ? UPUV False 3100000067090 3100000067090 3068 2 1 2 T01 10H AL0A PULL SS MANCHE MAILLE 0 0 0 0 0 0 745 0 0 0 MS 0
FA AL0A110 AL0A110 PULL SS MANCHE MAILLE CT 1 Acoté 4 F HAU PUL NAM PCE UNI MC GR M CN 0 ? ? UPUV False 3100000067106 3100000067106 3068 2 2 3 T01 10H AL0A PULL SS MANCHE MAILLE 0 0 0 0 0 0 745 0 0 0 MS 0
FA AL0A110 AL0A110 PULL SS MANCHE MAILLE CT 1 Acoté 4 F HAU PUL NAM PCE UNI MC GR M CN 0 ? ? UPUV False 3100000067113 3100000067113 3068 2 3 4 T01 10H AL0A PULL SS MANCHE MAILLE 0 0 0 0 0 0 745 0 0 0 MS 0
FA AL0A110 AL0A110 PULL SS MANCHE MAILLE CT 1 Acoté 4 F HAU PUL NAM PCE UNI MC GR M CN 0 ? ? UPUV False 3100000067120 3100000067120 3068 2 4 5 T01 10H AL0A PULL SS MANCHE MAILLE 0 0 0 0 0 0 745 0 0 0 MS 0
FA AL0A110 AL0A110 PULL SS MANCHE MAILLE CT 1 Acoté 4 F HAU PUL NAM PCE UNI MC GR M CN 0 ? ? UPUV False 3100000067137 3100000067137 4105 1 0 1 T01 10H AL0A PULL SS MANCHE MAILLE 0 0 0 0 0 0 745 0 0 0 MS 0
FA AL0A110 AL0A110 PULL SS MANCHE MAILLE CT 1 Acoté 4 F HAU PUL NAM PCE UNI MC GR M CN 0 ? ? UPUV False 3100000067144 3100000067144 4105 1 1 2 T01 10H AL0A PULL SS MANCHE MAILLE 0 0 0 0 0 0 745 0 0 0 MS 0
FA AL0A110 AL0A110 PULL SS MANCHE MAILLE CT 1 Acoté 4 F HAU PUL NAM PCE UNI MC GR M CN 0 ? ? UPUV False 3100000067151 3100000067151 4105 1 2 3 T01 10H AL0A PULL SS MANCHE MAILLE 0 0 0 0 0 0 745 0 0 0 MS 0
FA AL0A110 AL0A110 PULL SS MANCHE MAILLE CT 1 Acoté 4 F HAU PUL NAM PCE UNI MC GR M CN 0 ? ? UPUV False 3100000067168 3100000067168 4105 1 3 4 T01 10H AL0A PULL SS MANCHE MAILLE 0 0 0 0 0 0 745 0 0 0 MS 0
FA AL0A110 AL0A110 PULL SS MANCHE MAILLE CT 1 Acoté 4 F HAU PUL NAM PCE UNI MC GR M CN 0 ? ? UPUV False 3100000067175 3100000067175 4105 1 4 5 T01 10H AL0A PULL SS MANCHE MAILLE 0 0 0 0 0 0 745 0 0 0 MS 0
PR AL0A110 1 22.25 EUR
PR AL0A110 2 22.25 EUR
PR AL0A110 3 22.25 EUR
PR AL0A110 6 22.25 EUR
PR AL0A110 7 0 EUR
NCM AL0A110 4 1 F
NCM AL0A110 4 2 HAU
NCM AL0A110 4 3 PUL
NCM AL0A110 4 4 NAM
DES AL0A110 999999999 MAILLE PULL SS MANCHE
CU AL0A110 64
CU AL0A110 67
CU AL0A110 68
CU AL0A110 71
CU AL0A110 72
CU AL0A110 73
CU AL0A110 75
CU AL0A110 78
CU AL0A110 79 745
CU AL0A110 80
CU AL0A110 81
CU AL0A110 85
CU AL0A110 86
CU AL0A110 87
CU AL0A110 88
CU AL0A110 89
CU AL0A110 90
CU AL0A110 92
CU AL0A110 95
CU AL0A110 98
DAS AL0A110 0C090 3100000067083 3100000067083
DAS AL0A110 0C090 3100000067090 3100000067090
DAS AL0A110 0C090 3100000067106 3100000067106
DAS AL0A110 NANPF 3100000067151 3100000067151
DAS AL0A110 NANPF 3100000067168 3100000067168
DAS AL0A110 NANPF 3100000067175 3100000067175
SOA AL0A110 1
SOA AL0A110 2
SOA AL0A110 3
SOA AL0A110 4
SOA AL0A110 5
SOA AL0A110 6
SOA AL0A110 7
0
michelatoutfox Messages postés 828 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 7 mai 2013 1
13 mai 2011 à 18:44
face à un problème comme ça, voilà ce que je ferais (basé sur une expérience un peu semblable)

1) créer une table de prétraitement, 3 champs : ID int autoinc, cle C(4), contenu (M)
2) importer dans cette table l'ensemble du fichier txt, en plaçant dans le champ contenu la ligne entière
3) extraire du champ contenu et le mettre dans le champ cle (par exemple avec un GETWORDNUM)

4)faire ton traitement sur les lignes, mais tu n'as probablement pas besoin de réécrire des fichiers texte en sortie. Avec une table contenant les clé possibles, tu peux alors travailler avec une requète SQL de jointure, et tu effectues les différents traitements depusi le curseur résultant de la requète.
0
Rejoignez-nous