Question
amélioration d'une fonction basique
- jojo
-
Auteur du sujet
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 187
- Remerciements reçus 0
il y a 15 ans 3 mois #8226
par jojo
amélioration d'une fonction basique a été créé par jojo
Bonjour les PowerShelleurs 
J'ai créer une petite fonction pour m'afficher les derniers infos de mes sports préférés:
[code:1]Function Get-MyFavoriteSport {
param(
[int32]$newest=3
)
$arr = $()
$arr = $(
\"www.eurosport.fr/football/rss.xml\",
\"www.eurosport.fr/handball/rss.xml\",
\"www.eurosport.fr/natation/rss.xml\"
)
$n = new-object Xml
$arr | ForEach-object {
$n.Load($_)
$n.Rss.Channel.item | select -Property @{
Name=\"Les Dernières Infos\";Expression={$_.Title}
} -first $newest
\"\"
}
}
[/code:1]
voici l'affichage:
[code:1]PS D:\Documents and Settings\moi> Get-MyFavoriteSport
Les Dernières Infos
Football - Ligue 1 - Gourcuff et \"le complot\" contre Yoann
Football - Ligue 1 - Bodmer, alternative crédible
Football - Ligue des Champions - Cris, le cinquantième rugissant
Handball - Championnat d'Europe - Euro dames, mode d'emploi
Handball - Championnat d'Europe - Krumbholz: \"En 24 heures, on peut tout perdre\"
Handball - Champions League - Montpellier ? Ça va, ouf !
Natation - Ch.France - Petit bassin - Gilot, roi du cent
Natation - Ch.France - Petit bassin - Bousquet positive
Natation - Ch.France - Petit bassin - Retour en force de Bousquet[/code:1]
ce que je veux c'est un affichage comme ça:
[code:1]n.heures football
1h le barça 5 le real 0
2h Ligue des Champions - Cris..2
3.3h Ligue des Champions - Cris..1
n.heures handball
3.2h Champions League - Montpellier
5h Champions League - Montpellier
10h Champions League - Montpellier
etc..[/code:1]
j'ai tenter beaucoup de choses mais rien...le problème de conversion de date aussi ne m'a pas aider..
avez-vous peut-être une idée...si vous avez d'autres améliorations pour cette fonction..je serais aussi ravi
merci
<br><br>Message édité par: jojo, à: 7/12/10 12:17
J'ai créer une petite fonction pour m'afficher les derniers infos de mes sports préférés:
[code:1]Function Get-MyFavoriteSport {
param(
[int32]$newest=3
)
$arr = $()
$arr = $(
\"www.eurosport.fr/football/rss.xml\",
\"www.eurosport.fr/handball/rss.xml\",
\"www.eurosport.fr/natation/rss.xml\"
)
$n = new-object Xml
$arr | ForEach-object {
$n.Load($_)
$n.Rss.Channel.item | select -Property @{
Name=\"Les Dernières Infos\";Expression={$_.Title}
} -first $newest
\"\"
}
}
[/code:1]
voici l'affichage:
[code:1]PS D:\Documents and Settings\moi> Get-MyFavoriteSport
Les Dernières Infos
Football - Ligue 1 - Gourcuff et \"le complot\" contre Yoann
Football - Ligue 1 - Bodmer, alternative crédible
Football - Ligue des Champions - Cris, le cinquantième rugissant
Handball - Championnat d'Europe - Euro dames, mode d'emploi
Handball - Championnat d'Europe - Krumbholz: \"En 24 heures, on peut tout perdre\"
Handball - Champions League - Montpellier ? Ça va, ouf !
Natation - Ch.France - Petit bassin - Gilot, roi du cent
Natation - Ch.France - Petit bassin - Bousquet positive
Natation - Ch.France - Petit bassin - Retour en force de Bousquet[/code:1]
ce que je veux c'est un affichage comme ça:
[code:1]n.heures football
1h le barça 5 le real 0
2h Ligue des Champions - Cris..2
3.3h Ligue des Champions - Cris..1
n.heures handball
3.2h Champions League - Montpellier
5h Champions League - Montpellier
10h Champions League - Montpellier
etc..[/code:1]
j'ai tenter beaucoup de choses mais rien...le problème de conversion de date aussi ne m'a pas aider..
avez-vous peut-être une idée...si vous avez d'autres améliorations pour cette fonction..je serais aussi ravi
merci
Connexion ou Créer un compte pour participer à la conversation.
- jojo
-
Auteur du sujet
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 187
- Remerciements reçus 0
il y a 15 ans 3 mois #8228
par jojo
Réponse de jojo sur le sujet Re:amélioration d'une fonction basique
j'avance un peu, mais il me manque la conversion de la date de PubDate en heure et le titre de chaque sport:
[code:1] Function Get-MyFavoriteSport {
param(
[int32]$newest=3
)
$arr = $()
$arr = $(
\"www.eurosport.fr/football/rss.xml\",
\"www.eurosport.fr/handball/rss.xml\",
\"www.eurosport.fr/natation/rss.xml\"
)
$n = new-object Xml
$arr | ForEach-object {
$n.Load($_)
$n.Rss.Channel.item | Select-Object -Property @{
Name=\"n.Heures\";Expression={ $_.PubDate -as [datetime]}
},@{
Name=\"Titre\";Expression={$_.Title}
} -First $newest | Format-Table -auto
\"\"
}
}[/code:1]
voici le sortie:
[code:1]
PS D:\>
PS D:\> Function Get-MyFavoriteSport {
>> param(
>> [int32]$newest=3
>> )
>> $arr = $()
>> $arr = $(
>> \"www.eurosport.fr/football/rss.xml\",
>> \"www.eurosport.fr/handball/rss.xml\",
>> \"www.eurosport.fr/natation/rss.xml\"
>> )
>> $n = new-object Xml
>> $arr | ForEach-object {
>> $n.Load($_)
>> $n.Rss.Channel.item | Select-Object -Property @{
>> Name=\"n.Heures\";Expression={ $_.PubDate -as [datetime]}
>> },@{
>> Name=\"Titre\";Expression={$_.Title}
>> } -First $newest | Format-Table -auto
>> \"\"
>> }
>> }
>>
PS D:\> Get-MyFavoriteSport -newest 2
n.Heures Titre
06/12/2010 17:27:16 Football - Ligue des Champions - Drogba : Loin des yeux, près du cour
07/12/2010 12:49:40 Football - Ballon d'Or FIFA - Sneijder, l'Oranje amer
n.Heures Titre
07/12/2010 10:29:27 Handball - Championnat d'Europe - Euro dames, mode d'emploi
06/12/2010 15:47:31 Handball - Championnat d'Europe - Krumbholz: \"En 24 heures, on peut tout p
n.Heures Titre
05/12/2010 17:26:25 Natation - Ch.France - Petit bassin - Gilot, roi du cent
04/12/2010 16:53:48 Natation - Ch.France - Petit bassin - Bousquet positive
PS D:\>[/code:1]
Message édité par: jojo, à: 7/12/10 13:17<br><br>Message édité par: jojo, à: 7/12/10 13:18
[code:1] Function Get-MyFavoriteSport {
param(
[int32]$newest=3
)
$arr = $()
$arr = $(
\"www.eurosport.fr/football/rss.xml\",
\"www.eurosport.fr/handball/rss.xml\",
\"www.eurosport.fr/natation/rss.xml\"
)
$n = new-object Xml
$arr | ForEach-object {
$n.Load($_)
$n.Rss.Channel.item | Select-Object -Property @{
Name=\"n.Heures\";Expression={ $_.PubDate -as [datetime]}
},@{
Name=\"Titre\";Expression={$_.Title}
} -First $newest | Format-Table -auto
\"\"
}
}[/code:1]
voici le sortie:
[code:1]
PS D:\>
PS D:\> Function Get-MyFavoriteSport {
>> param(
>> [int32]$newest=3
>> )
>> $arr = $()
>> $arr = $(
>> \"www.eurosport.fr/football/rss.xml\",
>> \"www.eurosport.fr/handball/rss.xml\",
>> \"www.eurosport.fr/natation/rss.xml\"
>> )
>> $n = new-object Xml
>> $arr | ForEach-object {
>> $n.Load($_)
>> $n.Rss.Channel.item | Select-Object -Property @{
>> Name=\"n.Heures\";Expression={ $_.PubDate -as [datetime]}
>> },@{
>> Name=\"Titre\";Expression={$_.Title}
>> } -First $newest | Format-Table -auto
>> \"\"
>> }
>> }
>>
PS D:\> Get-MyFavoriteSport -newest 2
n.Heures Titre
06/12/2010 17:27:16 Football - Ligue des Champions - Drogba : Loin des yeux, près du cour
07/12/2010 12:49:40 Football - Ballon d'Or FIFA - Sneijder, l'Oranje amer
n.Heures Titre
07/12/2010 10:29:27 Handball - Championnat d'Europe - Euro dames, mode d'emploi
06/12/2010 15:47:31 Handball - Championnat d'Europe - Krumbholz: \"En 24 heures, on peut tout p
n.Heures Titre
05/12/2010 17:26:25 Natation - Ch.France - Petit bassin - Gilot, roi du cent
04/12/2010 16:53:48 Natation - Ch.France - Petit bassin - Bousquet positive
PS D:\>[/code:1]
Message édité par: jojo, à: 7/12/10 13:17<br><br>Message édité par: jojo, à: 7/12/10 13:18
Connexion ou Créer un compte pour participer à la conversation.
- jojo
-
Auteur du sujet
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 187
- Remerciements reçus 0
il y a 15 ans 3 mois #8231
par jojo
Réponse de jojo sur le sujet Re:amélioration d'une fonction basique
encore, on avance un peu, j'ai pu bricoler ceci, si quelqu'un peux me dire si c'est juste ou pas merci 
[code:1] Function Get-MyFavoriteSport {
param(
[int32]$newest=3
)
$arr = $()
$arr = $(
\"www.eurosport.fr/football/rss.xml\",
\"www.eurosport.fr/handball/rss.xml\",
\"www.eurosport.fr/natation/rss.xml\"
)
$n = new-object Xml
$arr | ForEach-object {
$n.Load($_)
$n.Rss.Channel.item | Select-Object -Property @{
Name=\"n.Heures\";Expression={
\"{0} Heure\" -f (($_.PubDate -as [datetime]) -(date)).Hours
}
},@{
Name=\"Titre\";Expression={$_.Title}
} -First $newest | Format-Table -auto
\"\"
}
}[/code:1]
il manque encore le nommage des titres selon les sports
Message édité par: jojo, à: 7/12/10 14:13<br><br>Message édité par: jojo, à: 7/12/10 14:14
[code:1] Function Get-MyFavoriteSport {
param(
[int32]$newest=3
)
$arr = $()
$arr = $(
\"www.eurosport.fr/football/rss.xml\",
\"www.eurosport.fr/handball/rss.xml\",
\"www.eurosport.fr/natation/rss.xml\"
)
$n = new-object Xml
$arr | ForEach-object {
$n.Load($_)
$n.Rss.Channel.item | Select-Object -Property @{
Name=\"n.Heures\";Expression={
\"{0} Heure\" -f (($_.PubDate -as [datetime]) -(date)).Hours
}
},@{
Name=\"Titre\";Expression={$_.Title}
} -First $newest | Format-Table -auto
\"\"
}
}[/code:1]
il manque encore le nommage des titres selon les sports
Message édité par: jojo, à: 7/12/10 14:13<br><br>Message édité par: jojo, à: 7/12/10 14:14
Connexion ou Créer un compte pour participer à la conversation.
- Jacques Barathon
- Hors Ligne
- Administrateur
-
Réduire
Plus d'informations
- Messages : 576
- Remerciements reçus 0
il y a 15 ans 3 mois #8233
par Jacques Barathon
Réponse de Jacques Barathon sur le sujet Re:amélioration d'une fonction basique
Jolie fonction.
La conversion de la date est correcte. Par contre, tu n'as pas fait de tri par date avant de faire ton select -first, tu n'as donc aucune garantie d'avoir les derniers éléments publiés.
D'ailleurs, en testant ta fonction j'ai noté qu'elle n'affichait pas exactement les trois derniers titres pour chaque sport.
Voici donc une version corrigée, et au passage j'ai modifié le mode d'affichage de l'âge et j'ai modifié l'en-tête de la colonne 'Titre' pour inclure le nom du sport (propriété Category de chaque article) :
[code:1]
param(
[int32]$newest=3
)
$arr = $()
$arr = $(
\"www.eurosport.fr/football/rss.xml\",
\"www.eurosport.fr/handball/rss.xml\",
\"www.eurosport.fr/natation/rss.xml\"
)
$n = new-object Xml
$arr | ForEach-object {
$n.Load($_)
$n.Rss.Channel.item | select `
@{n=\"Titre\";
e={$_.title}},
@{n=\"Age\";
e={[math]::Ceiling(((get-date) - ($_.pubdate -as [DateTime])).TotalHours)}} `
| sort Age | select -first $newest | Format-Table `
@{n=\"Age\";e={\"{0} h\" -f $_.age};a=\"right\"},
@{n=\"Titres {0}\" -f $n.Rss.Channel.item[0].Category;e={$_.titre}} -auto
\"\"
}
[/code:1]
La conversion de la date est correcte. Par contre, tu n'as pas fait de tri par date avant de faire ton select -first, tu n'as donc aucune garantie d'avoir les derniers éléments publiés.
D'ailleurs, en testant ta fonction j'ai noté qu'elle n'affichait pas exactement les trois derniers titres pour chaque sport.
Voici donc une version corrigée, et au passage j'ai modifié le mode d'affichage de l'âge et j'ai modifié l'en-tête de la colonne 'Titre' pour inclure le nom du sport (propriété Category de chaque article) :
[code:1]
param(
[int32]$newest=3
)
$arr = $()
$arr = $(
\"www.eurosport.fr/football/rss.xml\",
\"www.eurosport.fr/handball/rss.xml\",
\"www.eurosport.fr/natation/rss.xml\"
)
$n = new-object Xml
$arr | ForEach-object {
$n.Load($_)
$n.Rss.Channel.item | select `
@{n=\"Titre\";
e={$_.title}},
@{n=\"Age\";
e={[math]::Ceiling(((get-date) - ($_.pubdate -as [DateTime])).TotalHours)}} `
| sort Age | select -first $newest | Format-Table `
@{n=\"Age\";e={\"{0} h\" -f $_.age};a=\"right\"},
@{n=\"Titres {0}\" -f $n.Rss.Channel.item[0].Category;e={$_.titre}} -auto
\"\"
}
[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- jojo
-
Auteur du sujet
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 187
- Remerciements reçus 0
il y a 15 ans 3 mois #8234
par jojo
Réponse de jojo sur le sujet Re:amélioration d'une fonction basique
Merci Janel 
voici l'affichage sur mon xp:
[code:1]PS D:\> function Get-MyFavoriteSportByJanel {
>> param(
>> [int32]$newest=3
>> )
>> $arr = $()
>> $arr = $(
>> \"www.eurosport.fr/football/rss.xml\",
>> \"www.eurosport.fr/handball/rss.xml\",
>> \"www.eurosport.fr/natation/rss.xml\"
>> )
>> $n = new-object Xml
>> $arr | ForEach-object {
>> $n.Load($_)
>> $n.Rss.Channel.item | select `
>> @{n=\"Titre\";
>> e={$_.title}},
>> @{n=\"Age\";
>> e={[math]::Ceiling(((get-date) - ($_.pubdate -as [DateTime])).TotalHours)}} `
>> | sort Age | select -first $newest | Format-Table `
>> @{n=\"Age\";e={\"{0} h\" -f $_.age};a=\"right\"},
>> @{n=\"Titres {0}\" -f $n.Rss.Channel.item[0].Category;e={$_.titre}} -auto
>> \"\"
>> }
>> }
#### Affichage ####
PS D:\> Get-MyFavoriteSportByJanel -newest 2
Age Titres FOOTBALL
---
-4079 h Football - Ligue des Champions - La conférence de Deschamps et Mandanda EN DIRECT
-4076 h Football - Blog - Wenger : \"Benitez va durer\"
Age Titres HANDBALL
---
-4073 h Handball - Championnat d'Europe - Euro dames, mode d'emploi
-4061 h Handball - Champions League - Montpellier ? Ça va, ouf !
Age Titres NATATION
---
-4032 h Natation - Ch.France - Petit bassin - Gilot, roi du cent
-4008 h Natation - Ch.France - Petit bassin - Bousquet positive[/code:1]
comme tu vois je crois qu'il y a un problème dans le calcul de l'heure..une idée du pourquoi du comment ?
PS: j'ai lu autrefois qu'il vaut mieux mettre select-object avant sort-object pour des raisons de viteses d'executions..mais je ne sais pas trop..
merci encore
Message édité par: jojo, à: 7/12/10 16:52<br><br>Message édité par: jojo, à: 7/12/10 16:53
voici l'affichage sur mon xp:
[code:1]PS D:\> function Get-MyFavoriteSportByJanel {
>> param(
>> [int32]$newest=3
>> )
>> $arr = $()
>> $arr = $(
>> \"www.eurosport.fr/football/rss.xml\",
>> \"www.eurosport.fr/handball/rss.xml\",
>> \"www.eurosport.fr/natation/rss.xml\"
>> )
>> $n = new-object Xml
>> $arr | ForEach-object {
>> $n.Load($_)
>> $n.Rss.Channel.item | select `
>> @{n=\"Titre\";
>> e={$_.title}},
>> @{n=\"Age\";
>> e={[math]::Ceiling(((get-date) - ($_.pubdate -as [DateTime])).TotalHours)}} `
>> | sort Age | select -first $newest | Format-Table `
>> @{n=\"Age\";e={\"{0} h\" -f $_.age};a=\"right\"},
>> @{n=\"Titres {0}\" -f $n.Rss.Channel.item[0].Category;e={$_.titre}} -auto
>> \"\"
>> }
>> }
#### Affichage ####
PS D:\> Get-MyFavoriteSportByJanel -newest 2
Age Titres FOOTBALL
---
-4079 h Football - Ligue des Champions - La conférence de Deschamps et Mandanda EN DIRECT
-4076 h Football - Blog - Wenger : \"Benitez va durer\"
Age Titres HANDBALL
---
-4073 h Handball - Championnat d'Europe - Euro dames, mode d'emploi
-4061 h Handball - Champions League - Montpellier ? Ça va, ouf !
Age Titres NATATION
---
-4032 h Natation - Ch.France - Petit bassin - Gilot, roi du cent
-4008 h Natation - Ch.France - Petit bassin - Bousquet positive[/code:1]
comme tu vois je crois qu'il y a un problème dans le calcul de l'heure..une idée du pourquoi du comment ?
tu n'as pas fait de tri par date avant de faire ton select -first
PS: j'ai lu autrefois qu'il vaut mieux mettre select-object avant sort-object pour des raisons de viteses d'executions..mais je ne sais pas trop..
merci encore
Message édité par: jojo, à: 7/12/10 16:52<br><br>Message édité par: jojo, à: 7/12/10 16:53
Connexion ou Créer un compte pour participer à la conversation.
- Jacques Barathon
- Hors Ligne
- Administrateur
-
Réduire
Plus d'informations
- Messages : 576
- Remerciements reçus 0
il y a 15 ans 3 mois #8235
par Jacques Barathon
Réponse de Jacques Barathon sur le sujet Re:amélioration d'une fonction basique
Bizarre, c'est nickel chez moi, sur un XP également :
[code:1]
PS> function mysports {
>> param(
>> [int32]$newest=3
>> )
>> $arr = $()
>> $arr = $(
>> \"www.eurosport.fr/football/rss.xml\",
>> \"www.eurosport.fr/handball/rss.xml\",
>> \"www.eurosport.fr/natation/rss.xml\"
>> )
>> $n = new-object Xml
>> $arr | ForEach-object {
>> $n.Load($_)
>> $n.Rss.Channel.item | select `
>> @{n=\"Titre\";
>> e={$_.title}},
>> @{n=\"Age\";
>> e={[math]::Ceiling(((get-date) - ($_.pubdate -as [DateTime])).TotalHours)}} `
>> | sort Age | select -first $newest | Format-Table `
>> @{n=\"Age\";e={\"{0} h\" -f $_.age};a=\"right\"},
>> @{n=\"Titres {0}\" -f $n.Rss.Channel.item[0].Category;e={$_.titre}} -auto
>> \"\"
>> }
>> }
>>
PS> mysports -newest 2
Age Titres FOOTBALL
---
4 h Football - Blog - Wenger : \"Benitez va durer\"
5 h Football - Ballon d'Or FIFA - Sneijder, l'Oranje amer
Age Titres HANDBALL
---
7 h Handball - Championnat d'Europe - Euro dames, mode d'emploi
19 h Handball - Champions League - Montpellier ? Ça va, ouf !
Age Titres NATATION
---
48 h Natation - Ch.France - Petit bassin - Gilot, roi du cent
73 h Natation - Ch.France - Petit bassin - Bousquet positive
[/code:1]
Je vais regarder de plus près...
[code:1]
PS> function mysports {
>> param(
>> [int32]$newest=3
>> )
>> $arr = $()
>> $arr = $(
>> \"www.eurosport.fr/football/rss.xml\",
>> \"www.eurosport.fr/handball/rss.xml\",
>> \"www.eurosport.fr/natation/rss.xml\"
>> )
>> $n = new-object Xml
>> $arr | ForEach-object {
>> $n.Load($_)
>> $n.Rss.Channel.item | select `
>> @{n=\"Titre\";
>> e={$_.title}},
>> @{n=\"Age\";
>> e={[math]::Ceiling(((get-date) - ($_.pubdate -as [DateTime])).TotalHours)}} `
>> | sort Age | select -first $newest | Format-Table `
>> @{n=\"Age\";e={\"{0} h\" -f $_.age};a=\"right\"},
>> @{n=\"Titres {0}\" -f $n.Rss.Channel.item[0].Category;e={$_.titre}} -auto
>> \"\"
>> }
>> }
>>
PS> mysports -newest 2
Age Titres FOOTBALL
---
4 h Football - Blog - Wenger : \"Benitez va durer\"
5 h Football - Ballon d'Or FIFA - Sneijder, l'Oranje amer
Age Titres HANDBALL
---
7 h Handball - Championnat d'Europe - Euro dames, mode d'emploi
19 h Handball - Champions League - Montpellier ? Ça va, ouf !
Age Titres NATATION
---
48 h Natation - Ch.France - Petit bassin - Gilot, roi du cent
73 h Natation - Ch.France - Petit bassin - Bousquet positive
[/code:1]
Je vais regarder de plus près...
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.048 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- amélioration d'une fonction basique