Question
Modifier la premiere ligne d'un fichier texte
- Gabriel
- Auteur du sujet
- Hors Ligne
- Membre elite
Réduire
Plus d'informations
- Messages : 248
- Remerciements reçus 1
il y a 16 ans 7 mois #2289
par Gabriel
Modifier la premiere ligne d'un fichier texte a été créé 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
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.
- VICTORIN
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 5
- Remerciements reçus 0
il y a 16 ans 7 mois #2290
par VICTORIN
Réponse de VICTORIN sur le sujet Re:Modifier la premiere ligne d'un fichier texte
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]
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.
- Gabriel
- Auteur du sujet
- Hors Ligne
- Membre elite
Réduire
Plus d'informations
- Messages : 248
- Remerciements reçus 1
il y a 16 ans 7 mois #2291
par Gabriel
Réponse de Gabriel sur le sujet Re:Modifier la premiere ligne d'un fichier texte
Salut vinz2k
pour le get-date j'avais trouvé (normal c'etait la partie la plus facile )
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
pour le get-date j'avais trouvé (normal c'etait la partie la plus facile )
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6302
- Remerciements reçus 68
il y a 16 ans 7 mois #2296
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Modifier la premiere ligne d'un fichier texte
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...
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.
- PASCAULT
- Hors Ligne
- Membre senior
Réduire
Plus d'informations
- Messages : 78
- Remerciements reçus 0
il y a 16 ans 6 mois #2307
par PASCAULT
Réponse de PASCAULT sur le sujet Re:Modifier la premiere ligne d'un fichier texte
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
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.
- PASCAULT
- Hors Ligne
- Membre senior
Réduire
Plus d'informations
- Messages : 78
- Remerciements reçus 0
il y a 16 ans 6 mois #2308
par PASCAULT
Réponse de PASCAULT sur le sujet Re:Modifier la premiere ligne d'un fichier texte
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
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
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les débutants
- Modifier la premiere ligne d'un fichier texte