resulta que soy un novato en esto de Perl y tengo que hacer lo siguiente:
Se presenta un archivo CSV, este hay que convertirlo en una tabla HTML, el formato del archivo es el siguiente:
- Código: Seleccionar todo
1,2,"Hola","5";
2,3;%12/12/1999%;
Las comillas representan a un string, los porcentajes, una fecha, esto deberia generar la siguiente tabla:
- Código: Seleccionar todo
<tr>
<td>1</td>
<td>2</td>
<td><i>Hola</i></td>
<td><i>5</i></td>
</tr>
<tr>
<td>2</td>
<td>3</td>
<td><b>12/12/1999</b></td>
</tr>
El nombre del archivo se pasa como parametro al script y la salida es un archivo con el mismo nombre pero con extension .html.
Ahora bien, esto logre resolverlo con el siguiente código:
Using perl Syntax Highlighting
#!/usr/bin/perl
die "¿¿Y qué pasó con los parámetros??\n" unless $ARGV[0];
open(entrada,"<$ARGV[0]") or die "El archivo no existe\n";
$ARGV[0]=~s/\.csv/\.html/ or $ARGV[0].=".html";
open(salida,">$ARGV[0]");
print salida "<html>\n<head>\n</head>\n<body>\n<table border=\"1\">\n";
while(<entrada>){
chomp;
@w=split(/[;,]/);
print salida "\t<tr>\n";
foreach $e (@w){
(($e=~s/%/<b>/) and ($e=~s/%/<\/b>/)) or (($e=~s/"/<i>/) and ($e=~s/"/<\/i>/));
print salida "\t\t<td>$e</td>\n";
}
print salida "\t</tr>\n";
}
print salida "</table>\n</body>\n</html>\n";
close(entrada,salida);
die "¿¿Y qué pasó con los parámetros??\n" unless $ARGV[0];
open(entrada,"<$ARGV[0]") or die "El archivo no existe\n";
$ARGV[0]=~s/\.csv/\.html/ or $ARGV[0].=".html";
open(salida,">$ARGV[0]");
print salida "<html>\n<head>\n</head>\n<body>\n<table border=\"1\">\n";
while(<entrada>){
chomp;
@w=split(/[;,]/);
print salida "\t<tr>\n";
foreach $e (@w){
(($e=~s/%/<b>/) and ($e=~s/%/<\/b>/)) or (($e=~s/"/<i>/) and ($e=~s/"/<\/i>/));
print salida "\t\t<td>$e</td>\n";
}
print salida "\t</tr>\n";
}
print salida "</table>\n</body>\n</html>\n";
close(entrada,salida);
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4
Eso resuelve el problema muy bien, el problema surge cuando me avisan que los strings PUEDEN contener , o ;
Al contener alguno de esos caracteres, el split los separa, y esa no es la idea, ya que el string "H,O,L,A", debiese aparecer en el .html como <td><i>H,O,L,A</i></td>
Pense en ponerle un unless en luego del split, con una condicion de calce, pero no lo he podido resolver
Alguien sabe como podria hacerlo??
De antemano, muchas gracias ^^