Hola que tal! Hace poco empece a usar powershell, y he estado trabado sobre este ejercicio bastante tiempo
-----------------------------------------------------------------------------------------------
Un sistema realiza un backup de su base de datos en un archivo de texto plano con el siguiente formato:
Campo1=Valor1
Campo2=Valor2
Campo3=Valor3
***
Campo1=Valor4
Campo2=Valor5
Campo3=Valor6
Cada línea contiene el valor de un campo para un registro. Cada registro se encuentra separado del otro por 3 asteriscos.
Se necesita crear un script que lea el archivo de backup y genere un archivo CSV para poder procesarlo más fácilmente. La primer fila del archivo CSV contener los nombres de los campos, y en las filas siguientes estarán los valores de los mismos.
Obligatoriamente necesito usar el cmd Export-Csv
----------------------------------------------------------------------------------------------
Claramente no puedo agarrar directamente el archivo de texto y exportarlo a CSV.
Mi problema es tratar de leer el archivo de txt y empezar a darle forma de tabla o algo asi.
He intentado creando una tabla, pero se me complica demasiado agregar los datos a cada columna, ya que este tipo de estructura solamente me deja referenciar a una colmna solo por su nombre, y no por algun tipo de indice o algo.
Ayuda porfavor, algun consejo o tip, no quiero que me hagan el ejercicio
Desde ya muchas gracias
Saludos cordiales
Al final logre resolver el problema, o casi todo! faltan unos pequeños detalles nomas...
Lo subo por si algún día en el futuro alguien lo necesita
CitarParam(
[Parameter( Position = 1, Mandatory = $true )][String]$pathEntrada = ( Read-Host "Ingrese path de entrada " ),
[Parameter( Position = 2, Mandatory = $false )][String]$pathSalida = ( Read-Host "Ingrese path de salida " )
)
$tabla = New-Object System.Data.DataTable "tabla"
$contenido = Get-Content $pathEntrada#
#creamos las columnas
#A las columnas les pongo el nombre que les corresponde con $linea[0]
$i = 0
while( !$contenido[$i].Contains("***") ){
$linea = ($contenido[$i]).Split("=")
write-host "contiene" + $linea[0]
$col = New-Object system.Data.DataColumn $linea[0],([String])
$tabla.Columns.Add($col)
$i++
}
#en la variable i vamos a tener la cantidad de columnas
#empezamos a buscar los registros
$j = 0
foreach( $linea2 in $contenido ){
#Si encuentro un *** y j = 0 entonces creo una nueva fila
if(($j -eq 0) ){
write-host "se creo la fila "
$row = $tabla.NewRow()
}
# si j es menor que la cantidad de columnas o igual
#agrego a esa fila en la columna $linea2[0] el valor $linea2[1]
if( $j -lt $i ){
$j++
$linea2 = $linea2.Split("=")
write-host $linea2[0]
$row.($linea2[0]) = $linea2[1]
#una vez que j = a la cantidad de columnas es por que complete
#todas las columnas, por lo tanto agregamos la fila a la tabla
#e inicializamos nuevamente J
}else{
$tabla.Rows.Add($row)
$j = 0
}
}
$tabla | Export-csv -Path $pathSalida