|
| Question sur les boucles POUR |
| Iniciado por hypopololipopo, 19,dic. 2019 17:48 - 5 respuestas |
| |
| | | |
|
| |
| Publicado el 19,diciembre 2019 - 17:48 |
Bonjour,
J'ai fraichement installer windev express hier, ca j'ai besoin d'un logiciel permettant de générer un .xls a partir d'un HFSQL sans avoir l'analyse de ce dernier.
J'ai trouvé ce tuto: https://cedricbeaudier.blogspot.com/2011/05/snippet-convertir-une-table-hyperfile.html
Seulement, te quel il n'a pas l'aire de fonctionner probablement dû a des MAJ (l'article date de mai 2011), en effet les indirrections semblent ne pas fonctionner je les ai donc supprimé des expressions type
HOuvre({uneTable,indFichier},pass,hOLecture)
Ce qui a eu pour effet de faire fonctionner le code, cependant, la où il semble que ça bloque c'est pour la boucle qui génère le fichier .xls ( la boucle .csv n'etant de toute façons pas appelé vu que la fonction donc se sert l'auteur "typeexport" est réglée sur "xls" par défault.
donc je fait:
HLitPremier(maVue) TANTQUE PAS HEnDehors(maVue) idCol = 1 POUR idCol = 1 À nbRub xls[idLigne,idCol] = tabRub[idCol] FIN idLigne++ HLitSuivant(maVue) FIN
Je pense comprendre que le problème viens d'ici, parce que c'est l'endroit ou le code ne m'inspire pas trop au niveau de la logique. Mais si je comprend bien l'idée c'est:
HLitPremier(maVue): je me place a la premiere cellule TANTQUE PAS HEnDehors(maVue): va retourné false quand on va arriver a la première ligne vide xls[idLigne,idCol] = tabRub[idCol]: la ca m'échappe complètement, et jtrouve pas de doc, si je comprend on a l'équivalent de: for ($idcol = 1, $idcol <= $nbrub, idcol++) en php mais je ne comprend pas comment s'incrément idcol ..
Un petit éclairage s'il vous plaît ? |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.362 mensajes |
|
| Publicado el 20,diciembre 2019 - 02:39 |
Dans une boucle POUR, l'incrémentation se fait automatiquement en fonction du PAS. L'instruction complète est
POUR nValeurAIncrémenter = nValeurDébut A nValeurFin [PAS ValeurPas] ... FIN Si on omet "PAS ValeurPas", comme dans ton cas, cela équivaut à PAS 1
-- Il y a peut être plus simple, mais, ça tourneMensaje modificado, 20,diciembre 2019 - 02:42 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 2 mensajes |
|
| Publicado el 26,diciembre 2019 - 16:36 |
Bonjour,
Alors donc j'ai vraiment du mal.
txtRub est une chaîne = HListeRubrique(uneTable,hLstDetail) nbRub est un entier = ChaîneOccurrence(txtRub,RC) nbRub++ tabRub est un tableau de nbRub chaînes tabType est un tableau de nbRub chaînes pos est un entier = 1 uneRub est une chaîne = ExtraitChaîne(txtRub,pos,RC)
TANTQUE uneRub<>EOT tabRub[pos] = ExtraitChaîne(uneRub,1,TAB) tabType[pos] = ExtraitChaîne(uneRub,2,TAB)+"("+ExtraitChaîne(uneRub,4,TAB)+")" pos++ uneRub=ExtraitChaîne(txtRub,pos,RC) FIN [... xls est un xlsDocument xlsAjouteFeuille(xls,fExtraitChemin(ficHF,fFichier)) descripteur est un booléen = xlsSauve(xls, ficOut) SI descripteur = -1 ALORS RETURN FIN idLigne est un entier = 1 IF noheader = "" OR noheader = 0 THEN POUR idCol = 1 À nbRub xls[idLigne,idCol] = tabRub[idCol] FIN idLigne++ END IF typeheader <> "" ET typeheader <> 0 THEN POUR idCol = 1 À nbRub xls[idLigne,idCol] = tabType[idCol] FIN idLigne++ END
[...
HLitPremier(maVue) TANTQUE PAS HEnDehors(maVue) idCol = 1 POUR idCol = 1 À nbRub xls[idLigne,idCol] = tabRub[idCol] FIN idLigne++ HLitSuivant(maVue) FIN
Ce code, et notamment la derniere boucle, revoie N fois la première ligne du fichier HFSQL où N = le nombre de lignes de ce dernier au lieu de renvoyer les données de chaque lignes. j'ai esseyé des trucs pendant 2 jours mais je comprend pas, visiblement idLigne++ ne sert qu'a se placer a la ligne suivante pour réécrire tabRub[idCol] qui renvois la même chose a chaque ligne. Comment puis-je redéfinir la variable tabRub de sorte que je puisse lui passer en paramètre la colonne ET la ligne de la case qu'il doit écrire ? |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.362 mensajes |
|
| Publicado el 26,diciembre 2019 - 17:32 |
1-Dans un premier temps, concernant le début de ton code, celui ci sera nettement plus "léger"
sLstRub est une chaîne sRubriqueEnCours est chaîne tabRubriques est tableau <agrandissement=1> de chaîne tabType est tableau <agrandissement=1> de chaîne
sLstRub=HListeRubrique(UneTable,hLstDetail)
POUR TOUTE chaîne sRubriqueEnCours de sLstRub SEPAREE PAR RC TableauAjoute(tabRubriques,ExtraitChaîne(sRubriqueEnCours,1,TAB)) TableauAjoute(tabTabType,ExtraitChaîne(sRubriqueEnCours,2,TAB)) FIN 2-Pourquoi ne pas tous simplement utiliser la fonction HExporteXLS (https://doc.pcsoft.fr/fr-fr/?1000023934)
-- Il y a peut être plus simple, mais, ça tourneMensaje modificado, 26,diciembre 2019 - 17:35 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 2 mensajes |
|
| Publicado el 26,diciembre 2019 - 17:47 |
Voroltinquo a écrit : > 2-Pourquoi ne pas tous simplement utiliser la fonction HExporteXLS (https://doc.pcsoft.fr/fr-fr/?1000023934)
Haha ... et bien parce que je n'ai pas assez chercher dans la doc voilà tout x). Et bien j'essaye ça du coup, merci beaucoup ^^. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.362 mensajes |
|
| Publicado el 26,diciembre 2019 - 18:51 |
Il est vrai qu'elle est bien planquée celle là, elle n'est même pas dans le "voir aussi" de HImporteXLS.
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | | | |
| | |
|