Título: Powershell duda! Publicado por: Ur1cchio en 2 Septiembre 2015, 22:45 pm 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 Título: Re: Powershell duda! Publicado por: Ur1cchio en 3 Septiembre 2015, 03:37 am 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 Citar Param( [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 |