Autor
|
Tema: Extraer columnas de un csv separado por | (Leído 5,320 veces)
|
Pisangas
Desconectado
Mensajes: 12
|
Buenas tardes,
alguien me puede colaborar, tengo un archivo csv separado por | del cual solo me interesan algunas columnas, existe alguna manera a traves de un bat de extraer esta data a otro archivo txt.
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.874
|
alguien me puede colaborar, tengo un archivo csv separado por | del cual solo me interesan algunas columnas, existe alguna manera a traves de un bat de extraer esta data a otro archivo txt.
Desde siempre ha existido el mal hábito, ignorancia o la desinformación de pensar que Batch es un lenguaje de programación, que sirve para todo y que es la mejor solución y la solución más sencilla ante cualquier problema programático... pero NO, ninguna de esas declaraciones es cierta, y mucho menos cuando de trata de llevar a cabo un parsing de datos para parsear un formato específico (una tabla CSV) ya que Batch no provee ninguna funcionalidad built-in para ello, es muy limito e ineficiente, así que tendrías que usar un bucle de tipo For /F para parsear el contenido del texto y delimitar palabras mediante el uso de tokens. Se puede hacer en Batch, por supuesto, pero hacerlo sería muy tedioso (demasiado tiempo de desarrollo en comparación con cualquier otro lenguaje de verdad), y dando como resultado un código engorroso y poco eficiente en ciertos escenarios. En otras palabras, no vale la pena ni molestarse en intentar hacerlo en Batch habiendo mejores opciones, sí, me estoy refiriendo a PowerShell... Te explico. Teniendo un CSV con este contenido: File.csvProduct|Price|Amount Broccoli|75|1 Carrots|122|2 Beans|350|3 Puedes usar PowerShell de la siguiente manera para importar una tabla CSV desde un archivo, "extraer" las columnas que quieras, y opcionálmente crear una simple interfáz gráfica con un gridview para mostrar el resultado: Script.ps1$csv = Import-Csv -Path "C:\File.csv" -Delimiter "|" -Encoding "Default" $columns = ($csv | select "Product","Price") $columns | Out-GridView -PassThru -Title "Title" #$products = ($columns).Product #ForEach ($product in $products){ # Write-host $product #} #$prices = ($columns).Price #ForEach ($price in $prices){ # Write-host $price #}
PD: las lineas de código comentadas son para demostrarte como puedes hacer una iteración de las celdas de una columna específica. Saludos.
|
|
« Última modificación: 21 Diciembre 2017, 12:49 pm por Eleкtro »
|
En línea
|
|
|
|
Pisangas
Desconectado
Mensajes: 12
|
Parce tenes razón, tal vez ignorancia en el tema, casi no me involucro mucho con estos temas, pero tratare de conocerlo un poco mas, te agradezco profundamente tomes tiempo de tu día en responder las inquietudes, muy agradecido, con lo que me das me arreglas la vida.
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.874
|
Parce tenes razón, tal vez ignorancia en el tema, casi no me involucro mucho con estos temas, pero tratare de conocerlo un poco mas, te agradezco profundamente tomes tiempo de tu día en responder las inquietudes, muy agradecido, con lo que me das me arreglas la vida.
Ahora has hecho que me sienta mal , no sé ya como habrá sonado lo que dije, pero me gustaría aclararlo: lo de ignorante no lo decia por ti, solo estaba generalizando, quise decir que existe una ignorancia global, por que Batch está sobrevalorado por el 90% de los usuarios informáticos (por decir una cifra aleatoria pero realista), que por un motivo o por otro desconocen el resto de opciones a su alcance (como Powershell), y entonces, sin darse cuenta caen en el "error", por que se empeñan en hacer cosas con Batch para las cuales Batch sencillamente no está capacitado (o en algunos casos si, pero no vale la pena debido al consumo de tiempo y la ineficacia de esa herramienta). No te lo tomes a mal, no era mi intención llamarte ignorante de forma despectiva ni nada parecido, tampoco me estaba refiriendo a ti. Y la gran mayoria hemos empezado a programar en Windows creyendo que Batch era una buena herramienta de programación, yo incluido. En fin, espero que el código que te mostré te haya servido, lo puedes ejecutar como si se tratase de un archivo.bat, pero con extensión .ps1. Un saludo.
|
|
« Última modificación: 21 Diciembre 2017, 14:34 pm por Eleкtro »
|
En línea
|
|
|
|
Pisangas
Desconectado
Mensajes: 12
|
Todo bien, para nada, no soy programador, pero como buen ingeniero ante un problema me toca buscar solución.
Reitero mi agradecimiento y no me sentí ofendido para nada, me diste prácticamente la solución al caso.
Ahora bien, te cuento como me fue, me empape un poco de Power Shell y trate de implementar mi solución, luego de sortear una serie de errores pero quedo así
$csv = Import-Csv -Path "C:\md5\PNN.csv" -Delimiter "|" $columns = ($csv | select "DATO1","DATO2") $columns | Out-GridView
Quite ciertos parámetros por que a pesar de que existen, el power shell no me los reconocía tales como -ENCODING y -PassThru con esos parámetros me arroja una respuesta "A parameter cannot be found that matches parameter name...."
La verdad no se el por que el mensaje, si en la sintaxis del Power Shell si los encontré.... en fin los elimine, ya puedo tener las columnas que deseo por separado.
Parce Elektro mil gracias.
|
|
|
En línea
|
|
|
|
Pisangas
Desconectado
Mensajes: 12
|
este Power Shell esta como útil también termine exportandolo a un archivo csv. Con esto solucione mi caso.
gracias.
$csv = Import-Csv -Path "C:\xx\yy.csv" -Delimiter "|" $columns = ($csv | select "DATO1","DATO2") $columns | Out-File C:\xx\yy.csv
|
|
|
En línea
|
|
|
|
Pisangas
Desconectado
Mensajes: 12
|
preferi export-CSV este me lo envia separado por comas $csv = Import-Csv -Path "C:\xx\yy.csv" -Delimiter "|" $columns = ($csv | select "DATO1","DATO2") $columns | export-CSV C:\xx\yy.csv Aprendi mucho
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.874
|
Quite ciertos parámetros por que a pesar de que existen, el power shell no me los reconocía tales como -ENCODING y -PassThru con esos parámetros me arroja una respuesta "A parameter cannot be found that matches parameter name...." La disponibilidad de algunos parámetros depende de la versión de PowerShell que tengas instalada en tu sistema operativo, ya que en cada nueva versión de Windows viene integrada una versión más reciente de PowerShell con más funcionalidades. Saludos
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Extraer voz de un archivo o extraer la musica solamente !!!!!
Multimedia
|
magnox
|
2
|
3,942
|
28 Septiembre 2004, 17:16 pm
por theloop
|
|
|
Se puede empacar una dll por separado.
Ingeniería Inversa
|
Ferсhu
|
4
|
3,089
|
25 Noviembre 2007, 03:09 am
por Ferсhu
|
|
|
Como compilar clases por separado [?]
Programación C/C++
|
.:BlackCoder:.
|
1
|
5,084
|
28 Abril 2010, 05:42 am
por Littlehorse
|
|
|
mostrar datos de tabla por separado
PHP
|
elquenosabe
|
0
|
1,607
|
30 Julio 2010, 21:04 pm
por elquenosabe
|
|
|
Active Directory y DNS por separado ?
Redes
|
<<<-Basura->>>
|
4
|
3,724
|
23 Marzo 2012, 06:28 am
por <<<-Basura->>>
|
|