Bonjour,
Je viens de m'inscrire à cette liste, vu que je m'intéresse à Squeak depuis un moment, mais ce n'est que récemment que j'arrive à trouver un peu de temps pour enfin mettre les mains dedans. Là je débute vraiment en Smalltalk, et il y a quelque-chose que je ne comprend pas dans mon script (dans un Workspace) : En fait c'est pour récupérer des infos d'un fichier .CSV dans un dictionnaire, et s'il y a doublon de la clé, on additionne la nouvelle valeur à l'ancienne au lieu de créer deux éléments. A un moment j'utilise un asSymbol pour transformer une string du CSV pour faire la clé. Seulement dans certain cas, 'toto' devient #'toto' au lieu de #toto, et dans d'autres j'ai bien #toto... Là j'avoue que je ne comprends pas pourquoi... Quelqu'un a-t-il une idée ? Je ne sais pas si je me suis exprimé assez clairement, donc voici ci-après le contenu de mon CSV de test, et le code dans le Workspace. Cordialement, Frédéric ---- test.csv ---- toto,12,a machin,30,b toto,3,c ---- workspace ---- | f ligne donneesLigne assoc cle valeur ancienneValeur | assoc := Dictionary new. Transcript clear. f := FileStream oldFileNamed: 'test.csv'. [(ligne := f nextLine) notNil] whileTrue: [ donneesLigne := ligne csvSubstrings. cle := (donneesLigne at: 1) asSymbol. Transcript show: cle;cr. Transcript show: donneesLigne;cr. valeur := (donneesLigne at: 2) asInteger. (assoc includesKey: cle) ifFalse: [ assoc add: (cle->valeur)] ifTrue: [ Transcript show: 'on ajoute';cr. ancienneValeur := assoc at: cle. assoc at: cle put: (ancienneValeur + valeur)] ]. f close. Transcript show: assoc ; cr. assoc inspect. _______________________________________________ Squeak-fr mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr |
Le 05/07/07, [hidden email]<[hidden email]> a écrit :
> Bonjour, Bonjour, > Je viens de m'inscrire à cette liste, vu que je m'intéresse à Squeak > depuis un moment, mais ce n'est que récemment que j'arrive à trouver un > peu de temps pour enfin mettre les mains dedans. Bienvenue alors :-). > Là je débute vraiment en Smalltalk, et il y a quelque-chose que je ne > comprend pas dans mon script (dans un Workspace) : En fait c'est pour > récupérer des infos d'un fichier .CSV dans un dictionnaire, et s'il y a > doublon de la clé, on additionne la nouvelle valeur à l'ancienne au lieu > de créer deux éléments. > A un moment j'utilise un asSymbol pour transformer une string du CSV pour > faire la clé. Seulement dans certain cas, 'toto' devient #'toto' au lieu > de #toto, et dans d'autres j'ai bien #toto... Là j'avoue que je ne > comprends pas pourquoi... Quelqu'un a-t-il une idée ? Quand on obtient #'une chaine', c'est qu'il y a sûrement un espace ou un caractère non alphanumérique dans la chaîne. 'toto ' asSymbol --> #'toto ' 'toto' asSymbol --> #toto Le script me paraît correct, mais tu ne dis pas ce que fait la commande #csvSubstrings exactement et comment elle le fait. Autre chose, on n'ajoute pas dans un dictionnaire avec #add:, mais uniquement avec #at:put:. -- Damien Cassou _______________________________________________ Squeak-fr mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr |
In reply to this post by fbeudaert
Salut
Pour lire dans les fichier tu peux faire FileStream oldFileNamed: fileName do: [ ... ] Cela t'evite de faire f close. Tu devrais plutot nomé ton dictionaire 'dict' assoc fait plus penser a une seul association. tu peux utilisé #at:ifAbsent: dict at: key put: (dict at: key ifAbsent:[0]) + value Aussi tu n'as pas besoin de Transcript>>show:. Il est souvant plus facile d'utiliser le debugger. En squeak on a un tres bon debugger. Tu peus inspecter tres facilement toutes les variables et compiler du code a la voler. Donc c'est plus dinamic que les autres langage. C'est tres rare que les gens utilise le Transcript pour debugger. Tu peux utiliser la method #halt qui est l'équivalant d'un breakpoint. On Jul 5, 2007, at 7:14 PM, [hidden email] wrote: > | f ligne donneesLigne assoc cle valeur ancienneValeur | > assoc := Dictionary new. > Transcript clear. > f := FileStream oldFileNamed: 'test.csv'. > [(ligne := f nextLine) notNil] whileTrue: [ > donneesLigne := ligne csvSubstrings. > cle := (donneesLigne at: 1) asSymbol. Transcript show: cle;cr. > Transcript show: donneesLigne;cr. > valeur := (donneesLigne at: 2) asInteger. > (assoc includesKey: cle) > ifFalse: [ > assoc add: (cle->valeur)] > ifTrue: [ > Transcript show: 'on ajoute';cr. > ancienneValeur := assoc at: cle. > assoc at: cle put: (ancienneValeur + valeur)] > ]. > f close. > Transcript show: assoc ; cr. assoc inspect. _______________________________________________ Squeak-fr mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr |
In reply to this post by fbeudaert
[hidden email] a écrit :
> A un moment j'utilise un asSymbol pour transformer une string du CSV pour > faire la clé. Seulement dans certain cas, 'toto' devient #'toto' au lieu > de #toto, et dans d'autres j'ai bien #toto... Là j'avoue que je ne Rien à voir avec ton problème, mais sais tu que ta clé peut-être n'importe quel objet qui comprend les messages hash et =. Ainsi tu peux prendre pour ta clé directement une chaîne comme 'toto'. MLais ça peut-être bien d'autres objets... Hilaire _______________________________________________ Squeak-fr mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr cd40.tice.vcf (411 bytes) Download Attachment |
Free forum by Nabble | Edit this page |