Sélectionner objet(s) dans une liste.
JJV16-Jan-2010/14:33:23+1:00
Bonjour,


Comment gérer une liste plus précisément ? ne sélectionner que les deux ou quatre derniers (ou premiers) objets du fichier base.txt!

1/ Fichier base.txt

rebol[]

liste: compose/deep [

( make object! [
capitale: "Rome"
])

( make object! [
capitale: "Paris"
])

( make object! [
capitale: "Athènes"
])

( make object! [
capitale: "Madrid"
])

( make object! [
capitale: "Lisbonne"
])

	;etc
]



2/ Fichier prog.r



rebol[]


html: make string! 10000
emit: func [code] [repend html code]

liste: do %base.txt


foreach pays liste [
emit[

pays/capitale newline

]
]


write %resultat.txt html




merci à tous et à toutes.



Bon week-end

JJV
Didec18-Jan-2010/10:14:50+1:00
Et bien 'foreach parcours tout le block en affectant chaque élément à 'pays.

Pour ne prendre qu'une partie, utiliser les fonctions sur les séries, comme 'pick, first, second, ou les path avec variable, etc...

; les 4 premiers :
for i 1 4 1 [ emit [liste/:i/capitale  newline] ]

; les 4 derniers (en ordre inverse)
for i 0 3 1 [
    j: (length? liste) - i
    emit [liste/:j/capitale  newline]
]
; ou encore dans l'ordre
list2: at tail liste -4    ; pour ne pas modifier la position de liste, mais on peut positionner liste, puis la remettre au début avec 'head après le 'repeat
repeat i 4 [
    emit [list2/:i/capitale  newline]
]

; on peut aussi utiliser 'pick :
repeat i 4 [
    emit [get in pick list2 i 'capitale  newline]
]
ldci18-Jan-2010/10:26:41+1:00
Salut
Si j'ai bien compris tu veux récupérer un élément quelconque dans ta liste.

Différentes solutions sont possibles. Imaginons que je veuille récupérer le second objet de ton fichier txt (Paris).

Solution 1: tu récupères directement par un pick
str: pick liste 2
>> make object! [
capitale: "Paris"
]
ensuite tu récupères le nom de la capitale
capitale: second third str
>> "Paris"
La fonction emit [capitale newline] fonctionne

Une autre façon de faire est de construire une seconde liste qui ne contient que les capitales
liste2: []
foreach pays liste [
append liste2 pays/capitale
]
>> ["Rome" "Paris" "Athènes" "Madrid" "Lisbonne"]

emit [pick liste2 2 newline ]
te permet de sélectionner et d'écrire dans le fichier résultat.txt la valeur "Paris"
Cette solution est intéressante si ton objet n'a qu'un attribut (ici la capitale)
Si ton objet à plusieurs attributs (ex la capitale, le nombre d'habitants...) la première est meilleure car tu peux avoir accès aux n attributs par un third de l'objet récupéré dans la liste par le pick n
Bon courage et à +
JJV19-Jan-2010/16:54:23+1:00
Yep Yep ca y est l'annuaire des entreprises
http://www.itroovetoo.com qui liste les dernieres (9) entreprises inscrites est en route merci Didec et LDCI

le code est:
for i 0 8 1 [
    j: (length? liste) - i
emit[
emit [liste/:j/entreprise  newline]
]
]


Cet annuaire est presque finalisé il tourne avec Magic et Rebolcore coté serveur.
ce qui serait super: au coté d'Apache, de mettre Cheyenne et de le faire tourné dessus.
Un projet pour un avenir proche (6 mois).

Voila
JJV

Login required to Post.


Powered by RebelBB and REBOL 2.7.8.4.2