Question Modifier la premiere ligne d'un fichier texte

Plus d'informations
il y a 16 ans 7 mois #2289 par Gabriel
Salut

J'ai un fichier text qui a comme premiere ligne une date et je doit la remplacer par celle du jour

c'est la fonction search and replace qui me bloque (pourtant c'est le b.a.ba) la date dans le fichier peut etre n'importe quel jour (sous le format YYYYMMDD) et je dois y mettre la date du jour
je suis parti sur
[code:1]PS >$toto = get-content fichier.txt
PS >$toto
20061103
Robert
Marcel
[/code:1]

et j'ai trouvé PS >$toto -replace ''
c'est juste que je sais pas comment selectioner une string en forme de date pour la remplacer par une date...
je sais c'est balot mais là...
merci de vos lumieres expertes

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

Plus d'informations
il y a 16 ans 7 mois #2290 par VICTORIN
Salut Tony,

Tu peux utiliser des expressions régulières avec la fonction replace de la classe regex. ça donne :

[code:1][regex]::Replace($toto, \"\d{8}\", '20080503');[/code:1]

Pour la date actuelle au format YYYYMMDD, tu peux utiliser la fonction get-date. ça donne :

[code:1]get-date -f \"yyyyMMdd\"[/code:1]

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

Plus d'informations
il y a 16 ans 7 mois #2291 par Gabriel
Salut vinz2k

pour le get-date j'avais trouvé (normal c'etait la partie la plus facile :lol:)

le truc c'est que le nom de mon post et ma question finale sont legerement different.

J'explique au depart je voulais changer la premiere ligne de mon fichier texte, ce qui couvrait mon besoin avec un danger si quelqu'un vire la premiere ligne alors mon script modifierai des données utiles (la 2eme ligne etant devenu la premiere), l'info m'interesse par curiosité \"comment simplement remplacer la premiere ligne d'un fichier texte par une string\"

Maintenant quand j'ai finis d'ecrire mon post, je me suis apercu du danger potentiel, c'est la que je me suis dit il suffit de chercher une string qui est une date et de la remplacer.

si je comprend bien ton regex il cherche une entree de 8 digit et le remplace par la date, euh comme les regex et moi ca fait 2 (je sais je vais corriger ca) il y a pas un regex pour rechercher une date (on connait le format YYYYMMDD apres tout).

Mais merci je vais deja commencer a jouer avec ta proposition..
Tonic

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

Plus d'informations
il y a 16 ans 7 mois #2296 par Laurent Dardenne
Salut,
en recherchant dans le framework on peut éviter la regex qui n'opère aucun contrôle de validité si ce n'est que la première chaîne contient uniquement des chiffres.
[code:1]
$txt = get-content fichier.txt
$txt

$txt[0]
$sbConvert={param ($Data)
trap [System.FormatException] {Write-Warning \"Conversion impossible.\";$ErrorActionPreference='Continue'}
$ErrorActionPreference='SilentlyContinue'
#Appel ParseExact
[System.DateTime]::«»ParseExact($Data, \"yyyyMMdd\", [System.Globalization.CultureInfo]::InvariantCulture)
}
&$sbConvert $txt[0]
&$sbConvert $txt[1]

$txt[0]=[datetime]::now.tostring(\"yyyyMMdd\"«»)
$txt
[/code:1]
Tu peux utiliser ParseExact hors scriptbloc ;)
Il y a peut être une solution + simple autour de cast...

Tutoriels PowerShell

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

Plus d'informations
il y a 16 ans 6 mois #2307 par PASCAULT
Salut Tonic8,

Cela fait quelques temps que je n'avais pas fait un tour sur le forum, donc j'imagine que depuis tu as trouvé une solution à ton problème.
Ceci dit, pour compléter la solution de vinz2k, et comme le précise Laurent, il n'y a pas trop de contrôle. Si dans ton fichier, il y a 8 chiffres à suivre, ils seront remplacée par ta date.

Il n'existe cependant pas directement avec les expressions régulières un test de date valide. Il faut créer le \"match\" toi-même.

Un petit exemple:
[code:1]
$toto=\"19900102---20050207+++20990631
30001105***20031311---20303204-123123123\"

[regex]::Replace($toto, \"(19|20)[0-9]{2}[01][0-9][0-3][0-9]\", '20080515')
[/code:1]

Il y a donc \"match\" si la chaine commence par
- pour l'année:(19|20)[0-9]{2} 19 ou 20 suivi de 2 chiffres de 0 à 9 (1900 à 2099)
- suivi de 2 chiffres pour le mois:[01][0-9] -->00 à 19
- suivi de 2 chiffres pour le jour:[0-3][0-9] -->00 à 39

Eh oui ! Je sais ! il n'y a pas 39 jours ni 19 mois dans notre calendrier. Ce match a ses limites comme tu peux le voir... Il faut pousser éventuellement un peu plus loin si l'on veut matcher une date un peu plus précisemment. Mais une recherche sur internet avec \"regex date\" t'aura surement aiguillé dans cette direction.
un ex plus pointu:
blog.coolforest.net/index.php/post/2007/...x-:-Matcher-une-date

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

Plus d'informations
il y a 16 ans 6 mois #2308 par PASCAULT
Salut Tonic8,

Cela fait quelques temps que je n'avais pas fait un tour sur le forum, donc j'imagine que depuis tu as trouvé une solution à ton problème.
Ceci dit, pour compléter la solution de vinz2k, et comme le précise Laurent, il n'y a pas trop de contrôle. Si dans ton fichier, il y a 8 chiffres à suivre, ils seront remplacée par ta date.

Il n'existe cependant pas directement avec les expressions régulières un test de date valide. Il faut créer le \"match\" toi-même.

Un petit exemple:
[code:1]
$toto=\"19900102---20050207+++20990631
30001105***20031311---20303204-123123123\"

[regex]::Replace($toto, \"(19|20)[0-9]{2}[01][0-9][0-3][0-9]\", '20080515')
[/code:1]

Il y a donc \"match\" si la chaine commence par
- pour l'année:(19|20)[0-9]{2} 19 ou 20 suivi de 2 chiffres de 0 à 9 (1900 à 2099)
- suivi de 2 chiffres pour le mois:[01][0-9] -->00 à 19
- suivi de 2 chiffres pour le jour:[0-3][0-9] -->00 à 39

Eh oui ! Je sais ! il n'y a pas 39 jours ni 19 mois dans notre calendrier. Ce match a ses limites comme tu peux le voir... Il faut pousser éventuellement un peu plus loin si l'on veut matcher une date un peu plus précisemment. Mais une recherche sur internet avec \"regex date\" t'aura surement aiguillé dans cette direction.
un ex plus pointu:
blog.coolforest.net/index.php/post/2007/...x-:-Matcher-une-date

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

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