Mars 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | Calendrier |
|
| | Problème de ITEM_ADD et COUNT avec DLIST | |
| | |
Auteur | Message |
---|
Klaus
Nombre de messages : 12274 Age : 74 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Problème de ITEM_ADD et COUNT avec DLIST Ven 21 Jan 2011 - 1:18 | |
| Non, je veux simplement que les CR LF soient traités de façon identique, que ce soit par file_load, par item_add ou par item_insert. Je fais un item_add avec un string contenant 3 segments séparés donc par 2 CRLF. Le list n'affiche qu'une seule ligne, et COUNT retourne 1. Item_read retourne un seul string qui s'affiche avec PRINT en une seule ligne. Les CRLF n'apparaissent nulle part. Soit. Maintenant file_save. Le fichier résultant est sur 3 lignes ! Donc, les CRLF étaient bien quelque part ! Maintenant clear, puis file_load du même fichier. On est en droit de s'attendre que la séquence file_save, clear, file_load produise un résultat identique à celui avant le file_save. Mais que nenni ! File_load produit un list avec 3 lignes. Ceci veut dire que les CRLS, bien présents dans le fichier à charger, sont interprétés comme séparateur de lignes, alors qu'ils sont simplement ignorés par item_add et item_insert. Et ce n'est pas normal. Démonstration: - Code:
-
dim crlf$ crlf$ = chr$(13) + chr$(10) list 10 : top 10,100 : left 10,10 item_add 10,"aaaaa"+crlf$+"bbbbb"+crlf$+"ccccc" print "après item_add: "+str$(count(10))+" lignes" print item_read$(10,1) file_save 10,"test.txt" clear 10 file_load 10,"test.txt" print "après file_save/file_load: "+str$(count(10))+" lignes" end
| |
| | | Invité Invité
| Sujet: Re: Problème de ITEM_ADD et COUNT avec DLIST Ven 21 Jan 2011 - 2:41 | |
| Il y a vraiment une divergence entre toi et moi sur ce problème. La fonction à mon avis sur un list, est de faire une liste. D'accord tu veux que tu liste ait 3 segments. Mais pourquoi y mettre des retour chariots. Moi, quand je veux faire une séparation, je mets chr$(1...), quelque chose qui n’influe pas sur le fichier. Si à la place de list, tu te sers de tableau avec dim, si tu mets un retour chariotdans une variable tableau, à l'enregistrement, il y aura aussi un séparateur, et à la lecture, tu le retrouveras.
Tu veux faire du list, un memo. Mais depuis quand que c'est la même chose!. Il faut une logique, et je ne vois pas comment tu peux résoudre ton problème dans un fichier, en incluant, en forçant un séparateur. Tu cherches les problèmes.
Toi même, tu interviens dans mes remarques pour me dire bien souvent que Delphi mets ceci ou cela, et on doit respecter, ou Delphi, une autre fois Windows. A ton tour de respecter Panoramic dans sa méthode. Ce sont les retours chariot qui servent de séparateur, donc trouves d'autre séparateurs.
Un memo est du texte à la frappe. Un list est accumulateur d'objets. Chaque ligne d'un list pour moi est un edit, et doit être traité comme tel. La différence est la sauvegarde, et je ne vois pas comment tu peux demander qu'il y ait un autre séparateur qu'un retour chariot. Tu as des datas qui ont des virgules, ou des fichiers qui ont des virgules comme séparateurs, c'est pas le pied, si tu veux te servir de virgule.
Soit tu changes de séparateurs, soit tu demandes la création d'un objet spécifique, avec la possibilité d'avoir des séparateurs spéciaux, ou alors,tu fais comme moi, tu utilise le nouvel objet GRID en hide pour y mettre tes segments.
Tu es suffisamment pointu et costaux en programmation, pour te sortir de ce problème. Il te restes les fichiers à accès directs qui ont un champ défini, mais ici c'est hors sujet, ça n'a pas été construit.
Si tu veux un nouvel objet, parce qu'un list ne traite que des lignes différentes, à l'inverse d'un memo, qui a une continuité, il te faut mettre un cahier des charges, et proposer la solution qui permette d'avoir la sauvegarde et la lecture de ton objet.
A moins que Jack ait un truc à lui. En MS-DOS, tu peux changer le prompt, peux-être demander une possibilité de mettre un séparateur à la demande, mais je suis dépassé, déjà par toi en premier. Bonne nuit Klaus. |
| | | Klaus
Nombre de messages : 12274 Age : 74 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Problème de ITEM_ADD et COUNT avec DLIST Ven 21 Jan 2011 - 2:56 | |
| Non,non, je ne veux pas transformer une list en quelque chose d'autre. Je veux simplement qu'après avoir exécuté:
list 10 list 11 item_add 10,s$ file_save 10,"test.txt" clear 10 file_load 11,"test.txt"
la list numéro 11 soit identique à la list numéro 10. Et ce n'est pas le cas, et ce n'est pas normal.
| |
| | | Invité Invité
| Sujet: Re: Problème de ITEM_ADD et COUNT avec DLIST Dim 23 Jan 2011 - 2:57 | |
| Je n(avais pas l’intention d'aller au delà, mais j'ai voulu essayer quelque chose. Dès le départ, Klaus, moi je ne démord de l'idée qu'il faille revoir la sauvegarde de list. C'est trop tard, il faudrait revoir tous les fichiers qui ont étés fait jusqu’alors. La sauvegarde a été faite comme un mémo, on ne peut revenir en arrière. Maintenant comment faire. Le choix d'un séparateur est problématique, vu qu'en changeant de séparateur, dans six mois, tu voudras prendre ce nouveau séparateur pour séparer tes segments. Il m'a fallu du temps pour avoir l'idée, surtout que je ne cherchais aps, j'ai mes propres problèmes. Et puis tout à l'heure j'ai eu l'idée. Il faut sauvegarder la longueur de chaque ligne. - Code:
-
' teste de récupération d'un liste avec lignes comprenant des retour-chariot dim a%,b%,a$,b$,s$,f$ ,l%(100) label doche:' ! s$=chr$(10)+chr$(13) f$="C:\temp\teste liste.fic" height 0,200 list 1 :height 1,150 button 2:left 2,160:caption 2,lecture : on_click 2,doche list 3 :left 3,260:height 3,150:width 3,200
item_add 1,"salut"+s$+"comment ça va"+s$+"et toi?" item_add 1,"Noi, rien à dire"+s$+"à quoi tu penses?" item_add 1,"à rien" item_add 1,"je reste couché " ' -------------------------------
FILE_OPEN_WRITE 1,f$ b$="" for a%=1 to count(1) l%(a%)=len( item_read$(1,a%)) b$=b$+str$( l%(a%)) if a%<count(1) then b$=b$+"," next a% file_writeln 1,b$ for a%=1 to count(1) file_writebuf 1,item_read$(1,a%),l%(a%) next a% file_close 1
end ' ==================================================================================== doche: file_open_read 1,f$ file_readln 1,a$ a%=0 repeat b%=instr(a$,",") if b%>0 then b$=left$(a$,b%-1):a$=mid$(a$,b%+1,len(a$)-b%):a%=a%+1:l%(a%)=val(b$) until b%=0 or scancode=27 for b%=1 to a%+1 file_readbuf 1,a$,l%(b%) item_add 3,a$ next b% return Et ça marche parfaitement. Je me doute bien que tu dois connaitre cette possibilité, mais bon, j'ai le droit de faire le malin de temps en temps. Bonne nuit, le clavier fait trop de bruit, et ma femme grince! |
| | | JL35
Nombre de messages : 7090 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Problème de ITEM_ADD et COUNT avec DLIST Dim 23 Jan 2011 - 10:58 | |
| - Citation :
- le clavier fait trop de bruit, et ma femme grince!
ou vice versa | |
| | | Klaus
Nombre de messages : 12274 Age : 74 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Problème de ITEM_ADD et COUNT avec DLIST Dim 23 Jan 2011 - 11:41 | |
| Oui, je sais bien qu'avec FILE_READBUF on peut charger un fichier texte sans tenir compte des séparateurs, pour les restituer par la suite. Il y a tout une série de téchniques pour contourner ce problème que j'ai énoncé, à commencer par celle que j'ai utilisée: au lieu d'un DLIST, j'utilise un MEMO caché. Seul hic: je ne peux pas faire SORT sur un MEMO. Je dois donc faire FILE_SAVE du MEMO, FILE_LOAD dans un LIST, SORT du LIST, FILE_SAVE du LIST, FILE_LOAD dans le MEMO. Laborieux, tout ça ! @Jack: J'aimerais vraiment que tu donnes ton avis. Le code suivant marche bien si l'on remplace XXXX par MEMO. Mais pour LIST, DLIST et COMBO, ce code ne marche pas: le contenu de l'objet 11 n'est pas identique au contenu de l'objet 10. Et cela vient de ITEM_ADD (avec ITEM_INSERT, c'est pareil). CEs deux commandes ne gèrent pas lde CR LF en chargeant les données dans ces 3 types d'objet, alors que pour MEMO, c'est géré correctement. Ceci conduit, dans un LIST,DLIST ou COMBO à une seule ligne contenant la totalité du string y compris les CRLF. FILES_SAVE sauvegarde cela correctement dans un fichier. Mais dans ce fichier, il n'y a plus de distinction entre les CR LF ajoutés après chaque ligne de l'objet et les CR LF contenus à l'intérieur d'une ligne, si bien qu'après un FILE_LOAD de ce fichier, le résultat sera différent ! Je pense que ITEM_ADD et ITEM_INSERT devraient ajouter ou insérer une ligne pour chaque segment. Si ce n'est pas possible, pourrait-on envisager des commandes de type ITEM_LIST_ADD et ITEM_LIST_INSERT ? - Code:
-
dim s$, crlf$ crlf$ = chr$(13)+chr$(10) s$ = "aaaaaaa"+crlf$+"bbbbbb" XXXX 10 XXXX 11 : left 11,200 item_add 10,s$ file_save 10,"test.txt" clear 11 file_load 11,"test.txt" | |
| | | Contenu sponsorisé
| Sujet: Re: Problème de ITEM_ADD et COUNT avec DLIST | |
| |
| | | | Problème de ITEM_ADD et COUNT avec DLIST | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |