Présentation, et petit soucis avec les dictionnaires

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Présentation, et petit soucis avec les dictionnaires

fbeudaert
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
Reply | Threaded
Open this post in threaded view
|

=?UTF-8?Q?Re:__Pr=C3=A9sentation, _et_p?= etit soucis avec les dictionnaires

Damien Cassou-3
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
Reply | Threaded
Open this post in threaded view
|

Re: Présentation, et petit soucis avec les dictionnaires

Mathieu SUEN
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
Reply | Threaded
Open this post in threaded view
|

Re: Présentation, et petit soucis avec les dictionnaires

Hilaire Fernandes-2
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