Autor
|
Tema: Utilería, reemplazar TAB por " " (Leído 6,560 veces)
|
Yoel Alejandro
|
Hola, comparto un programilla que puede ser útil en este mismo foro. Encuentro que al subir código con la etiqueta code, los tabuladores son reemplazados por una cantidad de espacios que a mi entender son demasiados (son como 8). El código entonces toma una aparienci anti-estética . Se me ocurrió hacer un programa llamado "tab" que reemplace todos los TAB en el fichero .c original por una cantidad de espacios determinada, y vuelque su salida a un fichero auxiliar, cuyo contenido copiaré dentro de la etiqueta code. La sintaxis (UNIX) ./tab fichero_entrada fichero_salida N_spaces
y en DOS quitar el "./" que antecede a tab. Por ejemplo, "tab code.c code2.c 3". Si no se indica N_spaces se toman 3, y si no se indica fichero de salida toma la salida estándar. #include <stdlib.h> #include <stdio.h> /* Este programa reemplaza los caracteres TAB del fichero de texto * pasado como primer argumento por una cantidad determinada de espacios, * y escribe su salida en el fichero pasado como segundo argumento. * El tercer argumento (opcional) especifica cuántos caracteres ' ' * reemplazarán el TAB, y si no se indica, se tomará una cantidad de tres. */ int main( int argc, char *argv[]) { int i, N_spaces; char c; char * in_fname, * out_fname; FILE * in_fptr = NULL, * out_fptr = NULL; if ( argc < 2 ) { printf("Use:\n tab in_file out_file\n tab in_file out_file N_spaces\n"); goto failure; } in_fname = argv[1]; if ( argc > 3 ) { N_spaces = atoi( argv[3] ); if ( N_spaces < 1 ) N_spaces = 3; } else N_spaces = 3; if ( ( in_fptr = fopen( in_fname, "r" ) ) == NULL ) { printf( "No existe o no se pudo abrir '%s'\n", in_fname ); goto failure; } /* toma stdout si falta fichero de salida */ if ( argc < 3 ) out_fptr = stdout; else { out_fname = argv[2]; if ( ( out_fptr = fopen( out_fname, "w" ) ) == NULL ) { printf( "Imposible crear, abrir o escribir en '%s'\n", out_fname ); goto failure; } } /* reemplazando TAB por N_spaces caracteres ' ' */ while ( ( c = fgetc( in_fptr ) ) != EOF ) { if ( c != '\t' ) fputc( c, out_fptr ); else for ( i = 0; i < N_spaces; i++ ) fputc( ' ', out_fptr ); } if ( in_fptr != NULL ) fclose( in_fptr); if ( out_fptr != NULL ) fclose( out_fptr); return 0; failure: if ( in_fptr != NULL ) fclose( in_fptr); if ( out_fptr != NULL ) fclose( out_fptr); return -1; }
NOTA. Una alternativa es la utilería "sed" (UNIX), pero no se si tiene alternativa Windows.
|
|
|
En línea
|
Saludos, Yoel. P.D..- Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
|
|
|
vangodp
Desconectado
Mensajes: 455
|
Gracias por compartir
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
Interesante, es muy util para python sobre todo (anda que no dan errores las tabulaciones ni nada). PD: Un programa que te identase el código sería gracioso
|
|
|
En línea
|
|
|
|
eferion
Desconectado
Mensajes: 1.248
|
Interesante, es muy util para python sobre todo (anda que no dan errores las tabulaciones ni nada). PD: Un programa que te identase el código sería gracioso Ya existen ese tipo de programas... se denominan "beautifier" y hacen bastantes más cosas aparte de indentar el código. A título personal, para C / C++ me gusta mucho Uncrustify. Tiene muchísimas opciones de configuración. Precisamente debido a su libertad en cuanto a configuraciones es recomendable descargarse UniversalIndent. Es un GUI Genérico que permite configurar de forma bastante amigable un buen número de indentadores.
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
Yo por comodidad, uso un plugin que viene en el codeblocks. Así no tengo que estar abriendo un programa cada vez. De todas formas, me refería a intentar hacer el tuyo propio. Es un reto interesante. se denominan "beautifier" y hacen bastantes más cosas aparte de indentar el código. ¿Que más hacen esos programas a parte de indentar?
|
|
|
En línea
|
|
|
|
eferion
Desconectado
Mensajes: 1.248
|
Básicamente permiten presentar el código con un estilo uniforme ( no renombran métodos ni variables, pero son capaces de formatear todo el código ). Por poner algunas cosas: * Limitar la longitud máxima de cada línea. * Permite convertir tabs a espacios y viceversa. * Indica si se añaden o no espacios dentro de paréntesis, llaves, etc. * Indica cómo se deben tabular las indentaciones ( bucles, switch, if, etc ) * Permite que todos los archivos de un proyecto tengan el mismo formato ( UTF-8, ASCII, etc. ) * Establece un formato común para los saltos de línea ( Windows, Linux, Mac ) * Elegir si antes y/o después de separadores ( comas, puntos, paréntesis, operadores ) se añaden o se eliminan los espacios. * Permite unir / separar líneas bajo ciertas condiciones ( bucles, condicionales, ... ) * Permite alinear código. Sus configuraciones son de lo más variopintas y, dedicando tiempo a la configuración se puede conseguir el formato de código deseado cuidando hasta el más pequeño detalle. Eso sí, para configurar un beautifier completo de forma seria hay que tener al menos dos virtudes: * Saber inglés * Tener paciencia. Aún así hay opciones que, a primera vista, no queda muy claro qué hacen, pero bueno, todo es cuestión de copiar en el GUI un archivo de código y aplicarle el formato para ver qué sucede al cambiar determinadas configuraciones. Aunque bueno, el GUI permite guardar la configuración en un archivo de texto, por lo que la configuración solo tenemos que prepararla una vez
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
De todas formas, me refería a intentar hacer el tuyo propio. Es un reto interesante. ¿Que más hacen esos programas a parte de indentar? Otro aplicación de ese tipo es astyle, un listado de sus opciones se encuentra en su documentacion en linea. Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
Yoel Alejandro
|
Bueno, una cosa es hacer un programilla a gusto propio en 5 ó 10 min (y justo para eso estamos, pues es un foro de programadores) para solucionar alguna necesidad sobre la marcha, y otra es ir más allá y probar una herramienta profesional, jeje. Me parece interesante el "astyle" (Artistic Style), y sobre todo porque funciona por ordenes de comandos (en lo particular uso mucho más el teclado que el ratón), y por lo que leí permite crear y cargar un fichero de configuración con tus opciones preferidas, con la orden --options=opt_file Por lo general creo no necesitar un embellecedor de código si el mismo lo hice yo (jeje) porque trato de ser prolijo en la escritura. Pero sí que sería necesario al abrir el código fuente que suben algunos usuarios (principiantes más que todo) de este foro, y los hacen feiiiiiísimos , con el beautifier se acomoda rápido y se puede editar más cómodamente. Quizá termine proponiendo presentar nuestros propios minicódigos que imiten algunas de las funcionalidades de los buautifiers, .... ya saben, a manera de ejercicio para nosotros mismos ================================= EDITO: Este astyle es fantástico, en primer lugar es tipo command-line lo que imagino lo hace muy potente. Para imitar el comportamiento de mi programa tab, la orden correspondiente es: astyle --indent=spaces=3 < source.c > out.txt
para sacar la salida en un txt, reemplazando los TAB por 3 espacios. Thanks.
|
|
« Última modificación: 12 Marzo 2014, 04:29 am por yoel_alejandro »
|
En línea
|
Saludos, Yoel. P.D..- Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
|
|
|
eferion
Desconectado
Mensajes: 1.248
|
Este astyle es fantástico, en primer lugar es tipo command-line lo que imagino lo hace muy potente. Para imitar el comportamiento de mi programa tab, la orden correspondiente es:
astyle --indent=spaces=3 < source.c > out.txt
para sacar la salida en un txt, reemplazando los TAB por 3 espacios.
Uncrustify también funciona por línea de comandos... este modo de funcionamiento es casi un estándar para este tipo de programas. Por eso se diseñó UniversalIndent... para dotar de interfaz gráfica a éste tipo de programas.
|
|
|
En línea
|
|
|
|
Yoel Alejandro
|
Interfaz gráfica que difícilmente usaré, jajajaja, deben saber que soy un "talibán" de la consola, jeje Pero bueno como he dicho antes, cada quién con su gusto, hay quiénes gustan de la GUI's y a quiénes gustan de la consola, saludos
|
|
|
En línea
|
Saludos, Yoel. P.D..- Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
De donde puedo descargar utilidades: "Formas", "Estilos", "Motivos", D
Diseño Gráfico
|
Ad0nis
|
2
|
8,906
|
2 Septiembre 2006, 15:48 pm
por Ad0nis
|
|
|
Reemplazar texto en un RichTexbOx "Visual Basic"
Programación Visual Basic
|
BneviX
|
1
|
3,632
|
24 Octubre 2007, 00:14 am
por HaDeS, -
|
|
|
[Solucionado] Reemplazar "COMDLG32.OCX" con algun Control de Usuario.
Programación Visual Basic
|
agus0
|
2
|
4,189
|
5 Diciembre 2010, 23:39 pm
por agus0
|
|
|
recursos visual basic, """"""proceso inmortal"""""
Análisis y Diseño de Malware
|
Dark4ngel
|
7
|
14,265
|
3 Noviembre 2011, 10:42 am
por Dark4ngel
|
|
|
(Solucionado) [Batch] Como reemplazar el caracter "%" dentro de una variable...?
Scripting
|
Eleкtro
|
8
|
14,877
|
20 Marzo 2012, 16:16 pm
por Eleкtro
|
|