Question Inserer une ligne dans un fichier

Plus d'informations
il y a 12 ans 9 mois #15170 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

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

Plus d'informations
il y a 12 ans 7 mois #15427 par Madrolle
$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]

ShellDealer sur Twitter

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

Plus d'informations
il y a 12 ans 7 mois #15429 par Matthew BETTON
Perso écrit:

$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.

Plus d'informations
il y a 12 ans 7 mois #15436 par Laurent Dardenne
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

Tutoriels PowerShell

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

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