Page 1 sur 3

Dimensionner les colonnes d'un fichier .CSV

Publié : dim. 08/mars/2020 21:14
par omega
Bonsoir,

Peut-on dimensionner les colonnes d'un fichier.CSV en Pb?

Merci

Re: Dimensionner les colonnes d'un fichier .CSV

Publié : lun. 09/mars/2020 8:51
par Marc56
Je suppose que tu veux dire connaitre le nombre maximum de caractères de chaque champs pendant la lecture pour ensuite dimensionner les colonne d'un l'objet comme le ListIcon ?

Si oui, alors il suffit au moment de la découpe par StringField de compter la longueur de la chaine Len()

Si Len(chaine coupée) > Max alors Max=Len(chaine coupée)

Re: Dimensionner les colonnes d'un fichier .CSV

Publié : lun. 09/mars/2020 13:46
par omega
Salut Marc56

Ce que tu proposes me permet de connaître la longueur de chaque champs (nombre de caractères), mais comment dimensionner les colonnes du fichier csv? (colonne plus large ou moins large). Quand on crée un fichier csv, toutes les colonnes ont la même taille (en largeur).

Re: Dimensionner les colonnes d'un fichier .CSV

Publié : lun. 09/mars/2020 14:15
par Marc56
omega a écrit : Ce que tu proposes me permet de connaître la longueur de chaque champs (nombre de caractères), mais comment dimensionner les colonnes du fichier csv? (colonne plus large ou moins large). Quand on crée un fichier csv, toutes les colonnes ont la même taille (en largeur).
Tu ne confonds pas avec autre chose ?

Un fichier CSV n'a pas de "largeur de colonne" et même pas de colonne.
Ce sont juste des chaines avec des séparateurs.
D'une ligne à l'autre, les chaines n'ont pas besoin d'avoir la même longueur.
https://fr.wikipedia.org/wiki/Comma-separated_values

Il existe aussi une façon de stocker les données sous forme de bloc de texte (utilisés dans d'anciens systèmes)
Dans ce cas, chaque enregistrement est composé d'une ligne et chaque champs fait la même taille.
On découpe ensuite par longeur (comme avec Mid())
On peut créer ce type de fichier avec PB en utilisant par exemple LSet() et Rset() pour remplir les champs et avoir la même longueur.

Re: Dimensionner les colonnes d'un fichier .CSV

Publié : lun. 09/mars/2020 15:31
par GallyHC
Bonjour,

Pour moi un CSV peut avoir un séparateur et/ou une taille fixe, cela ne change en rien le format. Pour en revenir a ta question, je penses que LSet() ou Rset() répond à ce que tu cherche, exemple :

Code : Tout sélectionner

Debug LSet("AAAAAA", 4)
Debug RSet("AAAAAA", 4)
Debug LSet("AAAAAA", 20, "-")
Debug RSet("AAAAAA", 20, "-")
Cordialement,
GallyHC

Re: Dimensionner les colonnes d'un fichier .CSV

Publié : lun. 09/mars/2020 20:53
par omega
Non, je vois que vous ne m'avez pas compris ou alors c'est moi qui m'explique mal. Un fichier CSV contient des champs séparés par un délimiteur: ok, nous sommes d'accords là dessus. Généralement quand on crée un fichier dans ce format, le but est de l'utiliser comme une feuille excel n'est ce pas? sinon à quoi cela va servir? J'ai développé un logiciel de gestion et comme toujours, un de mes clients souhaite que chaque tableau (ListIconGadget) soit exportable vers excel, et c'est exactement ce que je cherche à faire. Cependant, une fois le fichier csv créé, je remarque que certains champs ne sont pas lisibles à cause justement de la taille de l'espace (que j'ai appelée colonne) et qui est plus petite que la longueur du champs. J'espère que c'est clair à présent.

Alors? existe t-il une solution non manuelle pour agir sur cette taille?

Merci

Re: Dimensionner les colonnes d'un fichier .CSV

Publié : lun. 09/mars/2020 21:20
par Mindphazer
Je vois pas le rapport avec PB
Si j'ai bien compris (?), ton programme génère ton fichier .csv que tu ouvres avec Excel.
Ce dernier ne change pas la taille des colonnes par rapport à la longueur de chaque champ entre tes points virgule
La mise en forme des colonnes Excel (taille,,etc) est sauvegardée quand tu enregistres ton tableau au format .xls(x)
Du coup, tu pourras faire ce que tu veux dans ton programme, ça changera rien.

Ou peut-être que j'ai rien compris à ta demande.

Re: Dimensionner les colonnes d'un fichier .CSV

Publié : lun. 09/mars/2020 22:49
par omega
Donc, ce n'est pas possible. Il va falloir faire ça manuellement (c'est ce que j'ai voulu éviter mais ... ben.. j'ai pas le choix à présent).

Merci beaucoup à tous

Bonne continuation

Re: Dimensionner les colonnes d'un fichier .CSV

Publié : lun. 09/mars/2020 23:37
par Mindphazer
Jette éventuellement un oeil ici : https://www.purebasic.fr/english/viewto ... 52#p504952

Re: Dimensionner les colonnes d'un fichier .CSV

Publié : lun. 09/mars/2020 23:54
par Ar-S
Je crois plutôt que tu souhaites savoir si on peut paramétrer la tailles des colonnes (A,B,C,D....) dans excel lorsqu'on importe un CSV ?
C'est ça ? Parce que sinon oublie.. tes histoires de colonnes dans un fichier CSV qui est un simple fichier texte.
Et si je me trompe, j'aimerai tout de même comprendre ta requête.
C'est frustrant que tu poses une question puis sans vraiment avoir de réponse tu passes à autre chose.
C'est quoi "faire ça manuellement ?" en PB ? Sur Excell ? En PB pour élargir les colonnes excell ?

Re: Dimensionner les colonnes d'un fichier .CSV

Publié : mar. 10/mars/2020 7:06
par Marc56
:idea: Plus simple et perenne: apprendre aux utilisateurs les bases d'Excel. 8)

Pour redimensionner d'un coup toutes les colonnes à la largeur du plus grand texte de chacune:
  1. Un clic en haut à gauche (intersection des noms de lignes et de colonnes)
  2. Un double-clic sur un des séparateurs de colonnes dans la ligne d'entête
Et voilà
:)

Re: Dimensionner les colonnes d'un fichier .CSV

Publié : mer. 11/mars/2020 12:21
par omega
@Ar-S
Je crois plutôt que tu souhaites savoir si on peut paramétrer la tailles des colonnes (A,B,C,D....) dans excel lorsqu'on importe un CSV ?C'est ça ?
Oui, c'est exactement ce que je cherche à faire mais en créant un fichier csv (ou excel) et non pas en l'important.
Parce que sinon oublie.. tes histoires de colonnes dans un fichier CSV qui est un simple fichier texte.
Je sais qu'un fichier csv est un simple fichier texte mais je sais aussi qu'un tel fichier ressemble (à 99%) à une feuille excel (puisqu'on l'ouvre avec excel) et donc, il contient des colonnes comme une feuille excel. Sinon, pourquoi créer un fichier csv si ce n'est uniquement pour l"utiliser comme Excel??
j'aimerai tout de même comprendre ta requête.
Tu l'as déjà comprise à ce que je sache. Mon but, je le répète c'est d'exporter le contenu de ma ListIconGadget vers EXCEL, et pour cela (d'après mes connaissances) il faut impérativement utiliser un fichier csv comme destinataire. C'est ce que j'ai fait. Ce qui me dérange maintenant, c'est la taille de l'espace réservé à chaque champs sur le fichier csv (que je préfère appeler fichier excel).
C'est frustrant que tu poses une question puis sans vraiment avoir de réponse tu passes à autre chose.
Et que ferais tu à ma place? Tu as une meilleure idée??
C'est quoi "faire ça manuellement ?" en PB ? Sur Excell ? En PB pour élargir les colonnes excell ?
Tout simplement ajuster les largeurs des colonnes de chaque champs manuellement (en utilisant les outils de l'excel bien entendu) puisqu'on a convenu que cette opération est impossible de le faire en pb?? Il ne reste plus qu'à ouvrir le fichier Créé (csv), dimensionner les colonnes à l'aide de la souris puis enregistrer le fichier et c'est ce que je viens de faire.

Re: Dimensionner les colonnes d'un fichier .CSV

Publié : mer. 11/mars/2020 13:41
par GallyHC
Bonjour,

Ne crois-tu pas qu'un exemple de ce que tu as et de ce que tu voudrais mis en balise code, ne serait pas plus simple a comprendre (2/3 lignes de chaque exemple)?

Cordialement,
GallyHC

Re: Dimensionner les colonnes d'un fichier .CSV

Publié : mer. 11/mars/2020 13:43
par Marc56
Je sais qu'un fichier csv est un simple fichier texte mais je sais aussi qu'un tel fichier ressemble (à 99%) à une feuille excel (puisqu'on l'ouvre avec excel) et donc, il contient des colonnes comme une feuille excel.
Non, on ne l'ouvre pas avec Excel. Excel l'importe plus ou moins automatiquement en tant que fichier de données.
Si on le laisse en CSV, ce sera juste du texte les formules, formats, pages etc ne seront pas sauvegardée.
Sinon, pourquoi créer un fichier csv si ce n'est uniquement pour l"utiliser comme Excel??
Le format CSV sert partout. Notamment pour faire des import / export entre bases de données.
Les fichier de log (d'Apache par exemple) sont des CSV
Mon but, je le répète c'est d'exporter le contenu de ma ListIconGadget vers EXCEL, et pour cela (d'après mes connaissances) il faut impérativement utiliser un fichier csv comme destinataire.
Non, pas forcément.
Tu peux créer directement des fichiers au format Excel qui seront ouverts sans devoir être importés

Les premiers fichiers Excel étaient au format .Dif C'est du texte brut, donc facile à construire
Data Interchange Format
https://fr.wikipedia.org/wiki/Data_Interchange_Format

Les fichiers .xls sont un format propriétaire mais tu peux en créer par exemple en VBScript

Les dernières versions (depuis office 2007) utilisent le format xlsx qui est un assemblage de fichiers XML et de fichier texte, le tout Zippé. Le description de ce format est disponible.

Re: Dimensionner les colonnes d'un fichier .CSV

Publié : mer. 11/mars/2020 14:16
par Ar-S
Pour résumer..
Il ne FAUT PAS que tu exportes en CSV.. si tu veux des colonnes de tailles spéciales...
Et non un CSV n'est pas du tout comme du xslx.. La preuve c'est que si tu fais un simple txt avec le bloc note contenant sur 2 lignes :

Code : Tout sélectionner

toto;10;chocolat
tata;15;cacao
et que tu le sauves en le renommant test.csv au lieu de test.txt, il s'ouvrira avec ton excell comme un CSV, à savoir séparer par des colonnes sur 2 lignes.

Pour voir comment c'est foutu, sauve avec excell le fichier créé ci dessus au format xlsx puis ouvre le avec 7zip (ou autre gestionnaire d'archives). Tu verras qu'il contient 3 dossiers avec différents fichiers xml (style, template etc...) Ce sont ces fichiers qui stock ta mise en page.

Il te faut donc créer un XLSX.. Ce qui doit être faisable vu que c'est du xml zippé... A toi d'analyser les choses à modifier dans ces xml puis de re zipper l'archive en .xlsx.