Question Aide pour lecture fichier texte

Plus d'informations
il y a 8 ans 10 mois #23646 par boutou
Bonjour a tous, alors voilà, finalement j'ai décidé d'extraire les données de mon mail dans un txt.

Par contre j'aimerais y récupérer les valeurs, j'arrive a avoir les 3 premiers car. mais après ça se corse un peu, j'aimerai récupérer les valeurs décimales mais comme elles ne sont pas alignées, c'est compliqué !

Comment fait-on en powerhsell pour lui dire de lire une ligne jusqu'a qu'il rencontre des chiffres ? Parce qu'ajouter des exceptions sur chaque ligne qui dépasse n'est pas très optimisé...

J'ai joint le fichier txt que j'extrait, si qq un pouvait me venir en aide, je lui serais très reconnaissant !

Voilà le code que j'ai écrit pour le moment :

[code:1]$array = (Get-Content -path c:\temp\currency.txt)[24 .. 193] | where { $_ -ne \"$null\" }
foreach ($a in $array)
{
#get currency code
$currencyCode = $a.substring(8,3)
write-output $currencyCode
#get currency name
$currencyname = $a.substring(12,19)
{
write-output $currencyname
}
}
exit[/code:1]

La pièce jointe currency.txt est absente ou indisponible

Pièces jointes :

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

Plus d'informations
il y a 8 ans 10 mois #23650 par Marc
Réponse de Marc sur le sujet Re:Aide pour lecture fichier texte
Salut,
Le mieux serais de recevoir les données au format CSV.
Ou de les copier/coller du mail dans un CSV.

Si aucun de ces cas n'est envisageable, ton salut se trouve dans les regex.

On en parle un peut ici (Laurent y fait une démo pour comprendre comment ça marche):
powershell-scripting.com/index.php?optio...95&catid=5#23295

Et ici leur syntax:
msdn.microsoft.com/fr-fr/library/az24scfc(v=vs.110).aspx

Au début c'est déroutant mais au final en quelques lignes tu doit pouvoir extraire tes donnée.

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

Plus d'informations
il y a 8 ans 10 mois #23651 par boutou
Réponse de boutou sur le sujet Re:Aide pour lecture fichier texte
Merci pour ton aide mais l'extract en csv ne fonctionne pas. Par contre sais-tu comment récupérer les valeurs d'une ligne à partir d'un chiffre (et non d'une lettre) en regex ? J'ai cherché un peu partout mais sans succès :-(

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

Plus d'informations
il y a 8 ans 10 mois #23657 par Laurent Dardenne
Une ébauche :
[code:1]
$s=' ALL Albanian Leke 0.0074346464 134.50538772'
$s -match '\s*(?<Tri>.[A-Z]{3}) (?<Pays>.*?) (?<Monnaies>.*?) (?<Chiffre1>.*?) (?<Chiffre2>.*)'
$matches

# Name Value
# ----
# Monnaies Leke
# Chiffre1 0.0074346464
# Tri ALL
# Pays Albanian
# Chiffre2 134.50538772
# 0 ALL Albanian Leke 0.0074346464 134.50538772
[/code:1]
On découpe la ligne sans trop de distinction du contenu, on peut affiner faut juste un peu plus de temps pour analyser les différents cas et préciser la regex.

Il peut y avoir + monnaies et y avoir de 1 à 4 espace de séparation.

[code:1]\d [/code:1]pour répondre à ta question ( trouvé dans le lien proposé par marcci...)<br><br>Message édité par: Laurent Dardenne, à: 17/05/17 19:31

Tutoriels PowerShell

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

Plus d'informations
il y a 8 ans 10 mois #23659 par Laurent Dardenne
Du coup je suis resté accroché :laugh:

Une possible solution (code de démo)
[code:1]

@'
ALL Albanian Leke 0.0074346464 134.50538772
DZD Algerian Dinars 0.0083056066 120.40059725
ARS Argentine Pesos 0.0586646420 17.046042814
AUD Australian Dollars 0.6756168477 1.4801288680
BSD Bahamian Dollars 0.9110079082 1.0976853121
BHD Bahraini Dinars 2.4162278132 0.4138682597
BDT Bangladeshi Taka 0.0112641902 88.776909815
BBD Barbadian or Bajan Dollars 0.4555039541 2.1953706241
BMD Bermudian Dollars 0.9110079082 1.0976853121
BOB Bolivian Bolivianos 0.1317127274 7.5922807141
BAM Bosnian Convertible Marka 0.5112918812 1.9558300000
BWP Botswana Pula 0.0875789544 11.418268316
BRL Brazilian Real 0.2936171559 3.4057955397
GBP British Pounds 1.1746682318 0.8513042006
BGN Bulgarian Leva 0.5111414459 1.9564056250
XOF CFA Francs 0.0015244902 655.95700000
XPF CFP Francs 0.0083800000 119.33174224
CAD Canadian Dollars 0.6676363531 1.4978213743
XAF Central African Francs 0.0015244902 655.95700000
CLP Chilean Pesos 0.0013630124 733.66905162
CNY Chinese Yuan Renminbi 0.1321707094 7.5659728562
COP Colombian Pesos 0.0003163024 3161.5310392
CRC Costa Rican Colones 0.0015978722 625.83227789
HRK Croatian Kuna 0.1345491518 7.4322281976
CUP Cuban Pesos 0.0343776569 29.088660770
CZK Czech Koruny 0.0377742007 26.473094908
DKK Danish Kroner 0.1344368120 7.4384388107
DOP Dominican Pesos 0.0192870960 51.848137139
XCD East Caribbean Dollars 0.3374095318 2.9637574100
EGP Egyptian Pounds 0.0503053991 19.878581996
AED Emirati Dirhams 0.2480461840 4.0315072943
EUR Euros 1.0000000000 1.0000000000
FJD Fijian Dollars 0.4316670852 2.3166000707
XAU Gold Ounces 1121.5093886 0.0008916555
GTQ Guatemalan Quetzales 0.1242187551 8.0503141364
HKD Hong Kong Dollars 0.1169563676 8.5501971432
HUF Hungarian Forint 0.0032370322 308.92495015
XDR IMF Special Drawing Rights 1.2477793553 0.8014237419
ISK Icelandic Kronur 0.0088210710 113.36491950
INR Indian Rupees 0.0142197674 70.324638199
IDR Indonesian Rupiahs 0.0000684497 14609.273945
IRR Iranian Rials 0.0000281371 35540.313722
IQD Iraqi Dinars 0.0007764780 1287.8664575
ILS Israeli New Shekels 0.2526913182 3.9573975359
JMD Jamaican Dollars 0.0070211365 142.42708334
JPY Japanese Yen 0.0080147095 124.77058579
JOD Jordanian Dinars 1.2846976860 0.7783932445
KES Kenyan Shillings 0.0088298346 113.25240493
KWD Kuwaiti Dinars 2.9896099326 0.3344917974
LBP Lebanese Pounds 0.0006031176 1658.0515290
MYR Malaysian Ringgits 0.2105161901 4.7502284722
MUR Mauritian Rupees 0.0258841206 38.633725137
MXN Mexican Pesos 0.0487618791 20.507823313
MAD Moroccan Dirhams 0.0922164799 10.844048708
NZD New Zealand Dollars 0.6267154491 1.5956204709
NGN Nigerian Nairas 0.0028899197 346.03037594
NOK Norwegian Kroner 0.1066439827 9.3769941327
OMR Omani Rials 2.3665620019 0.4225538985
PKR Pakistani Rupees 0.0086926511 115.03970249
PYG Paraguayan Guarani 0.0001629381 6137.2982472
PEN Peruvian Soles 0.2792830525 3.5805967848
PHP Philippine Pesos 0.0183569441 54.475298009
XPT Platinum Ounces 849.16896181 0.0011776219
PLN Polish Zlotych 0.2381574550 4.1989027813
QAR Qatari Rials 0.2501770126 3.9971698021
RON Romanian Lei 0.2196696389 4.5522904538
RUB Russian Rubles 0.0161533153 61.906796233
SAR Saudi Arabian Riyals 0.2429197249 4.1165862531
XAG Silver Ounces 15.187745423 0.0658425574
SGD Singapore Dollars 0.6518413847 1.5341155431
ZAR South African Rand 0.0691171227 14.468194867
KRW South Korean Won 0.0008160681 1225.3879874
LKR Sri Lankan Rupees 0.0059699521 167.50553091
SEK Swedish Kronor 0.1031980270 9.6901077413
CHF Swiss Francs 0.9143085032 1.0937227386
TWD Taiwan New Dollars 0.0302834539 33.021332441
THB Thai Baht 0.0263719416 37.919089026
TTD Trinidadian Dollars 0.1352025249 7.3963115767
TND Tunisian Dinars 0.3717367319 2.6900758363
TRY Turkish Lira 0.2567045449 3.8955290043
USD US Dollars 0.9110079082 1.0976853121
UAH Ukrainian Hryvni 0.0344487269 29.028648929
UYU Uruguayan Pesos 0.0324970221 30.772050303
VND Vietnamese Dong 0.0000401419 24911.614542
ZMW Zambian Kwacha 0.0985888526 10.143134582
'@ &gt; c:\temp\Change.txt

$Monnaie=@{
TypeName='MyCurrency'
Regex='^ (?&lt;Tri&gt;.{3}) (?&lt;Infos&gt;.*?) (?&lt;Chiffre1&gt;[-+]?[0-9]*\.?[0-9]*) (?&lt;Chiffre2&gt;[-+]?[0-9]*\.?[0-9]*)$'
Keys=0
}

$Tab=Gc c:\temp\Change.txt |
foreach {$_ -replace '\s+',' '}|
foreach {
if ($_ -Match $regex)
{
#http://powershell-scripting.com/index.php?option=com_joomlaboard&amp;Itemid=76&amp;func=view&amp;id=23250&amp;catid=14#23250
New-MatchesObject $_ @Monnaie
}
else {Write-warning \&quot;Todo:'$_'\&quot; }
}
$Tab[0]

# Chiffre2 Infos Chiffre1 Tri
#


---
# 134.50538772 Albanian Leke 0.0074346464 ALL
[/code:1]
Une regex ne peut déterminer ce qu'est le groupe Infos (nom de pays ou monnaie ?), c'est donc un groupe de mots ;)

Tutoriels PowerShell

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

Plus d'informations
il y a 8 ans 10 mois #23662 par boutou
Réponse de boutou sur le sujet Re:Aide pour lecture fichier texte
Ok merci Laurent pour ta précieuse aide :) ! je vais partir sur cette base et modifier si necessaire.

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

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