Professional Documents
Culture Documents
archivos CSV son una forma estndar de traslado de datos desde una aplicacin a otra . La mayora
de los programas que almacenan informacin en una base de datos , tales como la contabilidad y
software de seguimiento de ventas, puede exportar los datos como un archivo CSV para que pueda
ser entendida e import por otro programa . Definicin
CSV es la abreviatura de valores separados por comas . Al abrir un archivo CSV en un programa de
procesamiento de textos, cada informacin (valor) est separado por una coma. Los archivos CSV
son
tambin
conocidos
como
archivos
delimitados
por
comas
Tipos de aplicaciones
Cualquier programa de edicin de texto , incluyendo las aplicaciones bsicas, como el Bloc de notas
y WordPad, puede abrir un archivo CSV. Programas de hojas de clculo como Microsoft Excel y
Google Spreadsheets tambin puede importar archivos CSV , insertando cada pieza de datos en su
propia celda de tabla. Algunas aplicaciones que utilizan bases de datos, como los datos de Salesforce
,
importacin
exportacin
de
archivos
CSV
Identificacin
Identificar archivos CSV por su extensin de archivo " . Csv" . Para ver la extensin de un archivo en
Windows , haga clic en el nombre del archivo y seleccione " Propiedades". Haga clic en la pestaa
"General " y busca " valores separados por comas " en el "Tipo de Archivo" de lnea. En Mac OS X,
haga clic una vez en el archivo para resaltarlo y, a continuacin, pulse " Cmd + I " para que aparezca
la pantalla Obtener informacin. Mira debajo de " Nombre y Extensin " para ver si el nombre del
archivo
termina
en
CSV.
Tamao
Debido a que son archivos de texto bsicos con cero formato (por ejemplo, fuentes especiales , texto
en negrita ) , los archivos CSV son significativamente ms pequeos que otros archivos (por
ejemplo, archivos de Microsoft Excel XLS ) que contienen la misma informacin . osCommerce
Advertencia
piezas individuales de informacin ( los valores ) guardado en un archivo CSV no puede contener
comas , o el programa de importar el CSV interpretar el valor como dos valores independientes .
Por ejemplo , si guarda el nombre de una persona como " Brown , John " y la exportacin como un
archivo CSV , y luego tratar de importar el CSV en otro programa, el nuevo programa tendr en
cuenta " Brown" y " John " ser dos nombres distintos. Evite esta situacin eliminando las comas de
los valores individuales antes de tiempo (por ejemplo, cambiar "Brown , John " a " John Brown" ) .
fh.close()
Aunqe Python tiene un mdulo especialmente preparado para esto:
CSV con mdulo CSV
Uso del mdulo CSV:
import csv
f = open('fn.csv')
lns = csv.reader(f)
for line in lns:
nombre = line[0]
apellido = line[1]
#Cambiando separador (delimitador):
f = open('fn.csv')
lns = csv.reader(f,delimiter=';')
JDK 1.5
Muchas veces necesitamos trabajar con documentos en forma de filas y columnas, como
fuentes de datos. Podemos para ello usar documentos excel y utilizar alguna librera como
POI para procesarlos. Sin embargo, a veces no es necesario complicar tanto las cosas y
podemos usar formatos de ficheros mas sencillos como los ficheros CSV (comma separated
values).
En
la
Wikipedia
dan
esta
definicin
de
CSV:
"Los ficheros CSV (del ingls comma-separated values) son un tipo de documento sencillo
para representar datos en forma de tabla, en las que las columnas se separan por comas y las
filas por saltos de lnea. Los campos que contengan una coma, un salto de lnea o una comilla
doble
deben
ser
encerrados
entre
comillas
dobles."
Podemos usar cualquier editor de textos para generar este tipo de documentos, incluso
tambin otros programas de hojas de clculo (excel, openoffice calc...) Adems, como norma
se usa como delimitador el caracter coma, aunque se puede usar otro caracter como
separador.
Vamos por lo tanto a generarnos nuestro primer documento CSV. Yo lo voy a hacer con
OpenOffice:
Vamos
Seleccionamos
Una
vez
el
guardado,
guardar
el
caracter
delimitador
comprobemos
lo
documento
que
el
es
como
juego
realmente
de
un
CSV:
caracteres:
fichero
CSV:
en
google,
he
encontrado
este
enlace:
http://sourceforge.net/projects/javacsv/
Aqui podemos encontrar una sencilla librera java para tratar este tipo de ficheros. Vamos a
probarla:
porque
son
EMPEZANDO
dos
clases:
TRABAJAR.
Nos crearemos una clase que nos sirva de base para nuestro programa:
com.autentia.tutoriales.csv.Palindromos:
Nos vamos a crear otra clase que representar un fila en el fichero CSV. La
vamos a denominar VOPalindromo, a continuacin os muestro el cdigo:
public class VOPalindromo implements Serializable {
private String palabra;
private String reves;
private boolean palindromo;
public String getPalabra() {
return palabra;
}
public void setPalabra(String palabra) {
this.palabra = palabra;
}
public boolean isPalindromo() {
return palindromo;
}
public void setPalindromo(boolean palindromo) {
this.palindromo = palindromo;
}
public String getReves() {
return reves;
}
public void setReves(String reves) {
this.reves = reves;
}
}
Vamos a escribir ahora un mtodo en la clase Palindromos que lea todas las
palabras del fichero CSV, calcule si cada palabra es palndromo (capica) y las
almacene en memoria:
/**
*
*
*
*
*
*
*/
public List leePalindromos(String pathFichero, String delimitador)
throws Exception {
CsvReader cvsReader = null;
try {
File fichero = new File(pathFichero);
FileReader freader = new FileReader(fichero);
cvsReader = new CsvReader(freader,delimitador.charAt(0));
String[] headers = null;
List listaRegistros = new ArrayList();
// Leemos las cabeceras del fichero (primera fila).
if(cvsReader.readHeaders()) {
headers = cvsReader.getHeaders();
System.out.println("------- CABECERAS DEL FICHERO ------------");
for(int i=0;i<headers.length;i++) {
System.out.println(headers[i]);
}
System.out.println("-----------------------------------------------------");
}
// Leemos los registros
System.out.println("------- PALABRAS DEL FICHERO ------------");
while(cvsReader.readRecord()) {
// Podemos usar get con el nombre de la cabecera o por posicin
String palabra = cvsReader.get(headers[0]);
// Usamos StringBuffer para darle la vuelta a la palabra
StringBuffer aux = new StringBuffer(palabra);
String reves = aux.reverse().toString();
// Almacenamos el objeto VOPalindromo
VOPalindromo palindromo = new VOPalindromo();
palindromo.setPalabra(palabra);
palindromo.setReves(reves);
// Calculamos si es palindromo y lo almacenamos.
palindromo.setPalindromo(palabra.equalsIgnoreCase(reves));
listaRegistros.add(palindromo);
// Mostramos por pantalla:
System.out.println("-" + palabra +" == " + reves +
(palindromo.isPalindromo()?" : SI":" : NO"));
}
System.out.println("-----------------------------------------------------");
return listaRegistros;
} catch(Exception e) {
throw e;
} finally {
if(cvsReader!=null) {
cvsReader.close();
}
}
}
Invoquemos al mtodo desde main:
public static void main(String[] args) {
// Obtenemos el fichero y el delimitador
String fichero = args[0];
String delim = args[1];
Palindromos palindromo = new Palindromos();
Bueno, tan slo nos falta la parte de almacenar los resultados en el fichero CSV.
Nos crearemos otro mtodo en la clase Palindromos al que llamaremos:
escribePalindromos
public void escribePalindromos(List listaPalindromos,String pathFichero, String
delimitador) throws Exception {
CsvWriter writercsv = null;
try {
File fichero = new File(pathFichero);
FileWriter fwriter = new FileWriter(fichero);
// Creamos la clase que nos permite escribir en el fichero CSV.
writercsv = new CsvWriter(fwriter,delimitador.charAt(0));
// Escribimos las cabeceras.
writercsv.write("PALABRA");
writercsv.write("AL REVES");
writercsv.write(" ES PALNDROMO ?");
writercsv.endRecord();
// Escribimos los resultados.
for(int i=0;i<listaPalindromos.size();i++) {
VOPalindromo palin = (VOPalindromo)listaPalindromos.get(i);
writercsv.write(palin.getPalabra());
writercsv.write(palin.getReves());
writercsv.write((palin.isPalindromo())?"SI":"NO");
writercsv.endRecord();
}
} catch(Exception e) {
throw e;
} finally {
if(writercsv!=null) {
writercsv.close();
}
}
}
Lo invocamos desde main:
....
....
try {
palindromo.escribePalindromos(listaPalindromos,fichero,delim);
} catch (Exception e) {
e.printStackTrace();
}