Saltar al contenido

Leer archivo línea por línea en PowerShell

Hola, encontramos la respuesta a tu interrogante, continúa leyendo y la hallarás aquí.

Solución:

No hay mucha documentación sobre los bucles de PowerShell.

La documentación sobre bucles en PowerShell es abundante y es posible que desee consultar los siguientes temas de ayuda: about_For, about_ForEach, about_Do, about_While.

foreach($line in Get-Content .file.txt) 
    if($line -match $regex)
        # Work here
    

Otra solución idiomática de PowerShell para su problema es canalizar las líneas del archivo de texto al ForEach-Object cmdlet:

Get-Content .file.txt | ForEach-Object 
    if($_ -match $regex)
        # Work here
    


En lugar de la coincidencia de expresiones regulares dentro del bucle, puede canalizar las líneas a través de Where-Object para filtrar solo aquellos que le interesen:

Get-Content .file.txt | Where-Object $_ -match $regex | ForEach-Object 
    # Work here

Get-Content tiene mal desempeño; intenta leer el archivo en la memoria de una sola vez.

El lector de archivos C# (.NET) lee cada línea una por una

Mejor actuación

foreach($line in [System.IO.File]::ReadLines("C:pathtofile.txt"))

       $line

O un poco menos eficaz

[System.IO.File]::ReadLines("C:pathtofile.txt") | ForEach-Object 
       $_

los foreach declaración será probablemente un poco más rápido que ForEach-Object (ver comentarios abajo para más información).

El Todopoderoso switch funciona bien aquí:

'one
two
three' > file

$regex = '^t'

switch -regex -file file  
  $regex  "line is $_"  

Producción:

line is two
line is three

Si entiendes que te ha resultado de provecho este post, nos gustaría que lo compartas con más entusiastas de la programación de esta forma contrubuyes a difundir esta información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *