Important Obtenir les valeurs collones et ligne d'un .csv

Plus d'informations
il y a 3 ans 7 mois #23349 par WhyPok
Bonjour à tous !

J'ai décidé il y à quelques jours d'améliorer mon script, mais après de nombreuses recherche je bloque indéniablement. . .

Pour faire court, je récupère une multitude de tableaux de pages web qui ensuite sont sauvegardé en .csv .

Il s'agit d'un script routine lancé toutes les semaines,
j'ai donc besoin des .csv de la semaine active mais aussi d'une sauvegarde de ces même fichier afin de créer des statistiques sur le long termes.

Mon problème ce situe sur les \"archives\" je m'explique :

\"Description\",\"Prix\"
\"T2simplenon-aménagé\",\"71370\"
\"T2simplehabitable\",\"99400\"
\"T2simpleéquipé\",\"103347\"
\"T2simpleluxueux\",\"129158\"
\"Resde6T2non-aménagés\",\"115631\"
\"Resde6T2habitables\",\"223020\"
\"Resde6T2équipés\",\"290190\"
\"Resde6T2grandluxe\",\"480437\"
\"Res12T2non-aménagés\",\"236941\"
\"Res12T2habitables\",\"497830\"
\"Res12T2équipés\",\"637320\"
\"Res12T2grandluxe\",\"805925\"
\"Res24T2non-aménagés\",\"797101\"
\"Res24T2habitables\",\"1157340\"
\"Res24T2équipés\",\"1430944\"
\"Res24T2grandluxe\",\"2463052\"
\"Res48T2non-aménagés\",\"2593239\"
\"Res48T2habitables\",\"4189588\"
\"Res48T2équipés(-20%)\",\"3863888\"
\"Res48T2grandluxe\",\"8888161\"


C'est ce genre de .csv que je sauvegarde, ce qui m'intéresse pour finir le script, c'est le (-20%) qui est en fait une réduction qui peu apparaitre sur n'importe quel biens et qui change tout les jours (de bien et de valeur).

En soit dans les .csv de la semaine ça n'a pas d'importance le but du tableaux final est de montrer le biens le plus rentable.
Par contre dans mes archives pour avoir des statistique d'évolution du prix de ces bien, là ça à une importance . . .

Donc ce que j'aimerais faire :

-Tcheker si dans le .csv il y à (-'un_nombre')
-Si il est présent déterminer la valeur de la ligne et la mettre en variable (si le -20% est à la ligne 19 comme ici)
-Ensuite mettre la valeur de réduction (ici 20%) dans une variable
-Faire le calcule sur la même ligne (variable ligne) mais dans la seconde colonne (afin d'obtenir le prix non remisé)
Et exporter à nouveau le tout en .csv si possible sans les headers.

En espérant que une âme charitable puisse apporter son aide !

Message édité par: WhyPok, à: 21/03/17 15:01

Message édité par: WhyPok, à: 21/03/17 15:02<br><br>Message édité par: WhyPok, à: 21/03/17 15:03

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 7 mois #23351 par Laurent Dardenne
Salut,
WhyPok écrit:

-checker si dans le .csv il y à (-'un_nombre')

Avec import-csv on manipule des objets, ce sera plutôt contrôler une propriété d'un objet
WhyPok écrit:

-Si il est présent déterminer la valeur de la ligne et la mettre en variable (si le -20% est à la ligne 19 comme ici)

Il faut :
- utiliser une regex pour analyser le contenu.
- que le pattern de recherche soit connu et tjr le même.

WhyPok écrit:

-Faire le calcule sur la même ligne (variable ligne) mais dans la seconde colonne (afin d'obtenir le prix non remisé)

cf. objet
WhyPok écrit:

Et exporter à nouveau le tout en .csv si possible sans les headers.

Ce n'est donc plus un csv, c'est bien ça ?

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 7 mois #23354 par Laurent Dardenne
Une ébauche :
[code:1]
@'
\&quot;Description\&quot;,\&quot;Prix\&quot;
\&quot;T2simplenon-aménagé\&quot;,\&quot;71370\&quot;
\&quot;T2simplehabitable\&quot;,\&quot;99400\&quot;
\&quot;T2simpleéquipé\&quot;,\&quot;103347\&quot;
\&quot;T2simpleluxueux\&quot;,\&quot;129158\&quot;
\&quot;Resde6T2non-aménagés\&quot;,\&quot;115631\&quot;
\&quot;Resde6T2habitables\&quot;,\&quot;223020\&quot;
\&quot;Resde6T2équipés\&quot;,\&quot;290190\&quot;
\&quot;Resde6T2grandluxe\&quot;,\&quot;480437\&quot;
\&quot;Res12T2non-aménagés\&quot;,\&quot;236941\&quot;
\&quot;Res12T2habitables\&quot;,\&quot;497830\&quot;
\&quot;Res12T2équipés\&quot;,\&quot;637320\&quot;
\&quot;Res12T2grandluxe\&quot;,\&quot;805925\&quot;
\&quot;Res24T2non-aménagés\&quot;,\&quot;797101\&quot;
\&quot;Res24T2habitables\&quot;,\&quot;1157340\&quot;
\&quot;Res24T2équipés\&quot;,\&quot;1430944\&quot;
\&quot;Res24T2grandluxe\&quot;,\&quot;2463052\&quot;
\&quot;Res48T2non-aménagés\&quot;,\&quot;2593239\&quot;
\&quot;Res48T2habitables\&quot;,\&quot;4189588\&quot;
\&quot;Res48T2équipés(-20%)\&quot;,\&quot;3863888\&quot;
\&quot;Res48T2grandluxe\&quot;,\&quot;8888161\&quot;
\&quot;Res48T3équipés(-10%)\&quot;,\&quot;100\&quot;
\&quot;Res48T4équipés(-50%)\&quot;,\&quot;100\&quot;
\&quot;Res48T5équipés(-99%)\&quot;,\&quot;100\&quot;
\&quot;Res48T6équipés(-1%)\&quot;,\&quot;100\&quot;
\&quot;Res48T6équipés(-01%)\&quot;,\&quot;100\&quot;
'@ &gt; c:\temp\datas.csv

#$debugPreference='Continue'

Foreach($BienCourant in import-csv C:\Temp\Datas.csv)
{
switch -regex ($BienCourant.Description)
{
'\(-(?&lt;Taux&gt;\d{1,2})%\)\s*$' {
Write-debug (\&quot;Taux '{0}'% pour le bien {1}\&quot; -F $Matches.Taux,$BienCourant)
$Taux=$Matches.taux -as [Double]
$Prix=$BienCourant.Prix -as [Double]
$Reduction= ($Prix * $Taux)/100
$New=$BienCourant.Prix-$Reduction
Write-Warning \&quot;Nouveau : $New\&quot;
Continue
}

default {Write-Debug \&quot;Pas de traitement : $BienCourant\&quot; }
}
}
#$debugPreference='SilentlyContinue'
[/code:1]

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 7 mois #23355 par WhyPok
Merci pour ces informations ainsi que ce bout de code que je vais devoir étudier car je n'y est rien compris ...

A la base je faisais un Set-content [...] .csv, ce qui est intéressant puisque je l'envoyais vers un ftp puis je le récupérais avec google doc pour les afficher dans un tableau, j'avais donc les informations essentiels, et sans header. Là ce qui me pose problème c'est que les headers vont me bouffer une ligne à chaque fois du coup ça sera pas super lisible

[code:1]$username = \&quot;test\&quot;
$password = \&quot;test\&quot;
# 2-Ouverture du navigateur internet explorer en mode invisible
$ie = New-Object -ComObject InternetExplorer.Application
$ie.visible = $true
$ie.navigate(\&quot;http://monde2.empireimmo.com\&quot;«»)
# 3-Connexion et Soumission des données
while($ie.ReadyState -ne 4) {}
$ie.document.getElementById(\&quot;pseudo\&quot;«»).value = \&quot;$username\&quot;
$ie.document.getElementById(\&quot;motdepasse\&quot;«»).value = \&quot;$password\&quot;
$ie.document.getElementById(\&quot;rappel\&quot;«»).value = \&quot;0\&quot;
$ie.document.getElementById(\&quot;btLogin\&quot;«»).click()
# 4- Récupération des données et écriture dans fichiers
$ie.navigate(\&quot; monde2.empireimmo.com/agency/agency.php?...ppartement\"« »)
while($ie.ReadyState -ne 4) {}
$appartement = $ie.document.getElementById(\&quot;tblBuildings\&quot;«»).outertext.Substring(77) -replace \&quot; \u20AC\&quot;,\&quot;,\&quot; -replace \&quot;0 \&quot;,\&quot;0\&quot; -replace \&quot;1 \&quot;,\&quot;1\&quot; -replace \&quot;2 \&quot;,\&quot;2\&quot; -replace \&quot;3 \&quot;,\&quot;3\&quot; -replace \&quot;4 \&quot;,\&quot;4\&quot; -replace \&quot;5 \&quot;,\&quot;5\&quot; -replace \&quot;6 \&quot;,\&quot;6\&quot; -replace \&quot;7 \&quot;,\&quot;7\&quot; -replace \&quot;8 \&quot;,\&quot;8\&quot; -replace \&quot;9 \&quot;,\&quot;9\&quot; -replace \&quot;\)0\&quot;,\&quot;«») 0\&quot; -replace \&quot;\)1\&quot;,\&quot;«») 1\&quot; -replace \&quot;\)2\&quot;,\&quot;«») 2\&quot; -replace \&quot;\)3\&quot;,\&quot;«») 3\&quot; -replace \&quot;\)4\&quot;,\&quot;«») 4\&quot; -replace \&quot;\)5\&quot;,\&quot;«») 5\&quot; -replace \&quot;\)6\&quot;,\&quot;«») 6\&quot; -replace \&quot;\)7\&quot;,\&quot;«») 7\&quot; -replace \&quot;\)8\&quot;,\&quot;«») 8\&quot; -replace \&quot;\)9\&quot;,\&quot;«») 9\&quot; -replace \&quot;Res. de 6\&quot;,\&quot;Resde6\&quot; -replace \&quot;Res. 6\&quot;,\&quot;Res6\&quot; -replace \&quot;Res. 12\&quot;,\&quot;Res12\&quot; -replace \&quot;Res. 24\&quot;,\&quot;Res24\&quot; -replace \&quot;Res. 48\&quot;,\&quot;Res48\&quot; -replace \&quot; 0\&quot;,\&quot;,0\&quot; -replace \&quot; 1\&quot;,\&quot;,1\&quot; -replace \&quot; 2\&quot;,\&quot;,2\&quot; -replace \&quot; 3\&quot;,\&quot;,3\&quot; -replace \&quot; 4\&quot;,\&quot;,4\&quot; -replace \&quot; 5\&quot;,\&quot;,5\&quot; -replace \&quot; 6\&quot;,\&quot;,6\&quot; -replace \&quot; 7\&quot;,\&quot;,7\&quot; -replace \&quot; 8\&quot;,\&quot;,8\&quot; -replace \&quot; 9\&quot;,\&quot;,9\&quot; -replace \&quot; \&quot;,\&quot;\&quot;

#hop
Set-Content C:\temp\Appartement.csv $appartement
[/code:1]

Bout du code que j'utilise, à partir de là je test

[code:1]$test = Import-Csv -Encoding Default -Header Description, Prix C:\temp\Appartement.csv[/code:1]

J'ai donc un tableau avec seulement 2 colonnes + headers (au lieu de 6 colonnes sans header)

Ensuite j'arrive à ma balader dans les lignes et colonnes de cette manière

[code:1]
#le nom que porte le header de ma colonne
$1='Prix'
#ensuite la ligne, commence à 0
$2=5
#echo de la cellule en question
$test.$1[$2]
# resultat 223020[/code:1]
Et pour finir j'ai ça
[code:1]#if (- is present catch number between ( &amp; )and do 'calcul' at the same line in second collumn

$filename = Get-Date -format dd.MM.yy
$test | Export-Csv -Encoding Default -NTI C:\temp\$filename'MONCSV'.csv

$ie.Quit()[/code:1]

2 bout de code qui pourrait m’être utile, que je ne comprends pas encore
[code:1]Import-Csv -Delim ';' cols.csv | Foreach {$_.col3 = \&quot;prepend\$($_.col3)\&quot;;$_} |
Export-Csv cols2.csv -Delim ';' -NoTypeInformation[/code:1]
et
[code:1]Import-Csv d:\temp\so\csv1.txt -Delimiter ';' |
% { $_.col3 = 'append\' +$_.col3; $_ } |
Export-Csv d:\temp\so\csv2.txt -Delimiter ';'[/code:1]

la source : http://stackoverflow.com/questions/5401666/powershell-how-to-add-data-in-the-csv-file-to-one-column

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.244 secondes
Propulsé par Kunena