Question
Traitement de fichier
- Albert
- Auteur du sujet
- Hors Ligne
- Membre junior
-
- Messages : 38
- Remerciements reçus 0
J'ai un fichier qui contient des lignes de types :
sur de grandes pages.TEST.WORLD =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(Host = LUXS00)(Port = 1521))
)
(CONNECT_DATA = (SID = TEST))
)
CORE.WORLD =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(Host = LUXS001)(Port = 1521))
)
(CONNECT_DATA = (SID = CORE))
)
################################
FRV =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = LUXS00111.u.net.intra)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = FRV)
)
)
Ce que je voudrais c'est :
ect, un bloc sur une ligne enfaite (je ne sais pas si on voit bien dans la quote à cause du formatage web)TEST.WORLD = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(Host = LUXS00)(Port = 1521))) (CONNECT_DATA = (SID = TEST))
)
CORE.WORLD = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(Host = LUXS001)(Port = 1521))) CONNECT_DATA = (SID = CORE))
)
Donc concaténer les ligne si elles ne contiennent pas de '#' ou ne sont pas vide.
J'ai éssayé 2 3 trucs déjà mais ca ne marche pas comme je voudrais
[code:1]param([string]$file)
Get-Content $file | foreach {
if($_ -match \"#\" -or $_ -eq \"$null\"«»){Add-Content file2.txt \"$_`n\"}
else{$out = $out + $_}
}Add-Content file2.txt $out
[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- Albert
- Auteur du sujet
- Hors Ligne
- Membre junior
-
- Messages : 38
- Remerciements reçus 0
[code:1]param([string]$file)
$content = get-content $file
foreach($i in $content)
{
if($i -match \"#\")
{
$out = $out + \"`r\" + $i
}
else{$out = $out + $i}
}$out | out-file file2.txt[/code:1]
Mais il ne me fait aucun retour à la ligne alors qu'il trouve des \"#\" ...<br><br>Message édité par: FlqX, à: 23/08/13 09:05
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
[code:1]
$File='c:\temp\MyTSName.ora'
$File2='c:\temp\MyTSName2.ora'
$t=@'
TEST.WORLD =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(Host = LUXS00)(Port = 1521))
)
(CONNECT_DATA = (SID = TEST))
)
CORE.WORLD =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(Host = LUXS001)(Port = 1521))
)
(CONNECT_DATA = (SID = CORE))
)
################################
FRV =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = LUXS00111.u.net.intra)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = FRV)
)
)
'@ > $file
function Merge-OraAddressName {
param(
[parameter(Mandatory=$True,ValueFromPipeline=$True)]
$Line
)
begin {$out=''}
Process {
$Line=$_
write-Debug \"$line\"
if($Line -match \"#\"«»)
{
write-Debug \"`t Send\"
$out
\"`r`n$Line`r`n\"
$out=''
}
else
{
write-Debug \"`t Add\"
$out += $Line
}
}#process
end {$out}
}#Merge-OraAddressName
$Result=Get-content $file|
Merge-OraAddressName
$Result| out-file $file2
Get-content $file|
Merge-OraAddressName|
out-file $file2
[/code:1]
Note l'usage de write-debug
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Albert
- Auteur du sujet
- Hors Ligne
- Membre junior
-
- Messages : 38
- Remerciements reçus 0
Parcontre il me met absolument tout jusqu'au commentaire sur une seul ligne exemple :
devient# tnsnames.ora
TEST.WORLD =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(Host = LUXS00)(Port = 1521))
)
(CONNECT_DATA = (SID = TEST))
)
CORE.WORLD =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(Host = LUXS001)(Port = 1521))
)
(CONNECT_DATA = (SID = COREP))
)
################################
FRV =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(Host = FRV)(Port = 1597))
)
(CONNECT_DATA = (SID = SP))
)
tout sur une ligne.# tnsnames.ora
TEST.WORLD = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(Host = LUXS00)(Port = 1521)) ) (CONNECT_DATA = (SID = TEST)) )CORE.WORLD = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(Host = LUXS001)(Port = 1521)) ) (CONNECT_DATA = (SID = COREP)) )
################################
FRV = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(Host = FRV)(Port = 1597)) ) (CONNECT_DATA = (SID = SP)) )
Comment gérer pour garder les lignes vides ?
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
C'est un pb récurrent, donc une fois que l'on a compris le principe on le réutilise.Franchement chapeau.
FlqX écrit:
Des traces facilitant la mise au point de code. Consulte l'aide en ligne. Voir aussi la variable $DebugPreferenceQu'est ce que ce write-debug ?
FlqX écrit:
Par contre il me met absolument tout jusqu'au commentaire sur une seul ligne exemple
Exacte, mauvaise lecture des specs de ma part.
Mais je te laisse le corriger
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Albert
- Auteur du sujet
- Hors Ligne
- Membre junior
-
- Messages : 38
- Remerciements reçus 0
[code:1]param([string]$file)
$file2 = \"fileright.txt\"
function Merge-OraAddressName {
param(
[parameter(Mandatory=$True,ValueFromPipeline=$True)]
$Line
)
begin {$out=''}
Process {
$Line=$_
write-Debug \"$line\"
if($Line -match \"#\" )
{
write-Debug \"`t Send\"
$out
\"`r`n$Line`r`n\"
$out=''
}
else
{
if($Line.Length -eq 0)
{
write-Debug \"`t Add\"
$out += \"`r`n\"
}
else
{
write-Debug \"`t Add\"
$out += $Line
}
}
}#process
end {$out}
}#Merge-OraAddressName
Get-content $file|
Merge-OraAddressName|
out-file $file2[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Traitement de fichier