Question Inserer une ligne dans un fichier
- Erick
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 3
- Remerciements reçus 0
il y a 12 ans 9 mois #15170
par Erick
Inserer une ligne dans un fichier a été créé par Erick
Bonjour,
Je souhaiterai inserer une ligne dans un fichier HTML ou TXT à la ligne 12 par exemple.
J'ai trouvé comment ajouter une ligne en début ou en fin de fichier mais pas dans le corps de celui-ci.
Comment dois-je m'y prendre?
Merci d'avance
Je souhaiterai inserer une ligne dans un fichier HTML ou TXT à la ligne 12 par exemple.
J'ai trouvé comment ajouter une ligne en début ou en fin de fichier mais pas dans le corps de celui-ci.
Comment dois-je m'y prendre?
Merci d'avance
Connexion ou Créer un compte pour participer à la conversation.
- Madrolle
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 47
- Remerciements reçus 0
il y a 12 ans 7 mois #15427
par Madrolle
ShellDealer sur Twitter
Réponse de Madrolle sur le sujet Re:Inserer une ligne dans un fichier
$i = 5 #insert à la ligne 5
$a=get-content monfichier.txt
$b=$a.count
set-content monfichier2.txt $a[0..($i-1)]
add-content monfichier2.txt (\"o\"*50)
add-content monfichier2.txt $a[$i..$b]
$a=get-content monfichier.txt
$b=$a.count
set-content monfichier2.txt $a[0..($i-1)]
add-content monfichier2.txt (\"o\"*50)
add-content monfichier2.txt $a[$i..$b]
ShellDealer sur Twitter
Connexion ou Créer un compte pour participer à la conversation.
- Matthew BETTON
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 968
- Remerciements reçus 0
il y a 12 ans 7 mois #15429
par Matthew BETTON
Réponse de Matthew BETTON sur le sujet Re:Inserer une ligne dans un fichier
Perso écrit:
Bravo
$i = 5 #insert à la ligne 5
$a=get-content monfichier.txt
$b=$a.count
set-content monfichier2.txt $a[0..($i-1)]
add-content monfichier2.txt (\"o\"*50)
add-content monfichier2.txt $a[$i..$b]
Bravo
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 12 ans 7 mois #15436
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Inserer une ligne dans un fichier
Salut,
une autre approche ( sujet à amélioration), permet d'opérer sur des fichiers volumineux sans impacter l'occupation mémoire ni le garbage collector :
[code:1]
Function Merge-Content {
param (
[AllowEmptyString()]
[Parameter(Mandatory=$true,ValueFromPipeline = $true)]
[string] $InputData,
[Parameter(Position=0, Mandatory=$true)]
[string] $NewLine,
[Parameter(Position=1, Mandatory=$true)]
[ValidateScript({$_ -gt 0})]
[int] $Position,
[switch] $Force
)
begin {
$Count=0
$isInserted=$false
}
process {
$Count++
if ($count -eq $position)
{
Write-Output $NewLine
$isInserted=$true
}
Write-Output $InputData
}
End {
if ( $Force -and (-not $isInserted) )
{ Write-Output $NewLine }
}
}#Merge-Content
[/code:1]
qq tests :
[code:1]
$pattern=\"Line number {0}\"
$sbCreate={
param (
[ValidateScript({$_ -gt 0})]
[int] $nb
)
Write-Host \"Create $nb Lines\" -fore green
1..$nb|
% { $pattern -f $_}|
Set-Content c:\temp\monfichier.txt
Write-Host \"Create file\" -fore green
type c:\temp\monfichier.txt
}
$sbCall= {
param ([int] $Position, [switch] $Force )
del c:\temp\monfichier2.txt -EA SilentlyContinue
Get-Content c:\temp\monfichier.txt|
Merge-Content -NewLine \"New Line\" -Position $position -force:$Force|
Set-Content c:\temp\monfichier2.txt
Write-Host \"Read file\" -fore green
type c:\temp\monfichier2.txt
}
&$sbCreate 0
&$sbCall 5
&$sbCreate 1
&$sbCall 5
&$sbCall 5 -Force
&$sbCreate 3
&$sbCall 5
&$sbCall 5 -Force
&$sbCreate 5
&$sbCall 5
&$sbCall 5 -Force
&$sbCreate 5
&$sbCall 0
&$sbCall 0 -Force
&$sbCreate 1
&$sbCall 1
&$sbCall 1 -Force
[/code:1]
Ce qui permet ceci :
[code:1]
#crée deux fichiers
&$sbCreate 3
&$sbCall 5
&$sbCall 5 -Force
Get-Content c:\temp\monfichier*.txt|
Merge-Content -NewLine \"Multiple file, une seule insertion\" -Position 5 -force|
Set-Content c:\temp\MonResultat.txt
[/code:1]
Tout comptes fait on aimerais bien avoir nativement qq chose comme :
[code:1]
Merge-Content c:\temp\monfichier*.txt c:\temp\MonResultat.txt -NewLine \"Multiple file, une seule insertion\" -Position 5
[/code:1]<br><br>Message édité par: Laurent Dardenne, à: 28/07/13 17:26
une autre approche ( sujet à amélioration), permet d'opérer sur des fichiers volumineux sans impacter l'occupation mémoire ni le garbage collector :
[code:1]
Function Merge-Content {
param (
[AllowEmptyString()]
[Parameter(Mandatory=$true,ValueFromPipeline = $true)]
[string] $InputData,
[Parameter(Position=0, Mandatory=$true)]
[string] $NewLine,
[Parameter(Position=1, Mandatory=$true)]
[ValidateScript({$_ -gt 0})]
[int] $Position,
[switch] $Force
)
begin {
$Count=0
$isInserted=$false
}
process {
$Count++
if ($count -eq $position)
{
Write-Output $NewLine
$isInserted=$true
}
Write-Output $InputData
}
End {
if ( $Force -and (-not $isInserted) )
{ Write-Output $NewLine }
}
}#Merge-Content
[/code:1]
qq tests :
[code:1]
$pattern=\"Line number {0}\"
$sbCreate={
param (
[ValidateScript({$_ -gt 0})]
[int] $nb
)
Write-Host \"Create $nb Lines\" -fore green
1..$nb|
% { $pattern -f $_}|
Set-Content c:\temp\monfichier.txt
Write-Host \"Create file\" -fore green
type c:\temp\monfichier.txt
}
$sbCall= {
param ([int] $Position, [switch] $Force )
del c:\temp\monfichier2.txt -EA SilentlyContinue
Get-Content c:\temp\monfichier.txt|
Merge-Content -NewLine \"New Line\" -Position $position -force:$Force|
Set-Content c:\temp\monfichier2.txt
Write-Host \"Read file\" -fore green
type c:\temp\monfichier2.txt
}
&$sbCreate 0
&$sbCall 5
&$sbCreate 1
&$sbCall 5
&$sbCall 5 -Force
&$sbCreate 3
&$sbCall 5
&$sbCall 5 -Force
&$sbCreate 5
&$sbCall 5
&$sbCall 5 -Force
&$sbCreate 5
&$sbCall 0
&$sbCall 0 -Force
&$sbCreate 1
&$sbCall 1
&$sbCall 1 -Force
[/code:1]
Ce qui permet ceci :
[code:1]
#crée deux fichiers
&$sbCreate 3
&$sbCall 5
&$sbCall 5 -Force
Get-Content c:\temp\monfichier*.txt|
Merge-Content -NewLine \"Multiple file, une seule insertion\" -Position 5 -force|
Set-Content c:\temp\MonResultat.txt
[/code:1]
Tout comptes fait on aimerais bien avoir nativement qq chose comme :
[code:1]
Merge-Content c:\temp\monfichier*.txt c:\temp\MonResultat.txt -NewLine \"Multiple file, une seule insertion\" -Position 5
[/code:1]<br><br>Message édité par: Laurent Dardenne, à: 28/07/13 17:26
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.088 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les initiés
- Inserer une ligne dans un fichier