2012-01-10 12 views
46

Tengo un problema común que estoy buscando. tengo líneas de texto similar me gustaría de alguna manera para insertar automáticamente el texto para alinear verticalmente tal que:Buscando una forma fácil de alinear texto

x="foo" data="123" y=x 
x="b 4" data="12 " y=x 
x="baaar4" data="123aaa5" y=x 
x="baaaa,4" data="123dddd5" y=x 

convierte este

x="foo"  data="123"  y=x 
x="b 4" data="123 "  y=x 
x="baaar4" data="123aaa5" y=x 
x="baaaa,4" data="123dddd5" y=x 

Ésta es una cuestión de texto. La entrada proviene del bloc de notas. La salida va a la libreta. Esto no es un problema de formateo.

+0

¿No puedes utilizar tablas? – j08691

+1

cómo? Lo que tengo es texto en el bloc de notas. Podría poner los datos en una base de datos, supongo. Pero el número de "columnas" diferiría cada vez. Lo que quiero es copiar este texto pegado en una caja negra, presionar un botón y recibir el resultado. Creo que emacs tenía algo como esto. –

+0

Parece que sus etiquetas son incorrectas, tiene la pregunta etiquetada como html pero está rechazando sugerencias relacionadas con html. – Guvante

Respuesta

56

Notepad ++ tiene un complemento que hace esto por usted. Se llama "Code alignment". Le permite alinear texto verticalmente según los caracteres que elija. Puede instalarlo a través del Administrador de complementos para el bloc de notas.

A continuación se presenta un escenario de uso simple. Empiezas con el siguiente código y luego te alineas con "equals", que es un atajo/comando incorporado para el complemento.

Initial Code Sample, without alignment

Después de eso, se termina con la siguiente continuación:

Code after equals alignment

También se puede dar un paso más allá y utilizar el "align por ..." de comandos que permite usted para especificar cualquier cadena de alineación arbitraria. En el siguiente ejemplo, elegí el carácter "#" para alinear mis comentarios uno al lado del otro. Esta misma facilidad podría haber sido una cadena más larga, y el resultado no es uno de longitud 1.

ofrecen a continuación:

Final result after arbitrary code alignment string

+3

Esto funcionó muy bien y mucho mejor que TextFX, que no se alinea con espacios adicionales. La "alineación de código" fue maravillosa y ¡exactamente lo que necesitaba para sangrar un código Java basado en STRINGS! No solo un personaje A ++++ a quien haya escrito el plugin. – Ligemer

+0

no funcionó la primera vez, pero después de alinear por 'espacio' tres veces, parecía bastante decente, gracias – knocte

+0

Desafortunadamente, este complemento no funcionó para mí cuando traté de [alinear por coma] (http: // i.imgur.com/FSNuY5r.png) –

0

Usted no incluyó un lenguaje de programación por lo que aquí es un poco de C# que lleva a cabo la operación solicitada:

int[] maxLengths = new int[100]; 
string[][] splitLines = new string[input.Length][]; 
for (int i = 0; i < input.Length; i++) 
{ 
    splitLines[i] = input[i].Split(' '); 
    for (int j = 0; j < splitLines[i].Length; j++) 
    { 
     maxLengths[j] = Math.Max(maxLengths[j], splitLines[i][j].Length); 
    } 
} 
for (int i = 0; i < splitLines.Length; i++) 
{ 
    for (int j = 0; j < splitLines[i].Length; j++) 
    { 
     Console.Write(string.Format("0,-" + (maxLengths[j] + 1) + ":G}", splitLines[i][j])); 
    } 
    Console.WriteLine(); 
} 

Tenga en cuenta que el 100 tiene que ser mayor o igual al número de segmentos por línea. Puede hacer que ese número no se solucione con un poco de trabajo si lo desea.

Básicamente este algoritmo divide cada línea en función de espacios, luego para cada parte calcula el máximo en una matriz común. Finalmente recorre todas estas partes segmentadas y las imprime justificadas a la izquierda utilizando espacios del tamaño más grande (más 1 para obtener el espacio entre los elementos).

+0

esto es una exageración. El texto está en el bloc de notas ++ (entrada) y OP quiere el texto formateado en el bloc de notas ++ (salida) –

+0

@anphu: La pregunta no incluye el bloc de notas ++ en ninguna parte del mismo. El Bloc de notas no ofrece absolutamente nada de esto, por lo que es necesario tocar un programa diferente. Sucedí que escribí en la consola, pero puede escribir de manera equivalente en el archivo desde el que lee y obtiene el mismo efecto. – Guvante

+0

pregunta está etiquetada en Notepad ++ –

26

Si desea alinear por caracteres específicos Utilice Bloc de notas extensión ++ TextFX.

Mira: TextFX> TextFX Editar> Línea de múltiples líneas por (,)

También hay: Alinear múltiples líneas por (=), y la línea de varias líneas (Personaje portapapeles)

Aquí hay un enlace para obtener consejos útiles para la programación.

http://techbrij.com/518/10-notepad-tips-tricks-fast-development

+0

Cada vez que probé el complemento de alineación de código, congelaba el bloc de notas ++ y luego no hacía nada al reanudar. TextFX funciona perfectamente sin embargo. –

+0

Esto también funcionó para mí, copiando un conjunto de resultados TSQL en el bloc de notas ++ (que tab-separa). Pude alinear alrededor de 400 filas por 50 columnas. Sin embargo, TextFX no reconocería la pestaña como un carácter del portapapeles, y ni siquiera aceptaría "\ t", pero afortunadamente pude reemplazar las pestañas con comas, alinearlas por columna, y luego volver a cambiar las comas (afortunadamente, ¡no había pestañas o comas en mi salida sql!) –

+0

TextFX es un buen complemento, pero al alinear con '=' no hay espacio libre entre '' 'y los caracteres que preceden. – u01jmg3

0

He creado un script en Python que se puede utilizar con Python script plugin de Notepad ++: nppPyAlignColumn

+0

Hola, DUzun. Tu guión parece genial. Sin embargo, tengo problemas para instalarlo. Después de que hice todo, no hay nada en el menú "script", ¿tal vez es incompatible con la versión más reciente de Notepad ++? – user15964

+0

Si no tiene el archivo 'doLocalConf.xml' en la carpeta de NPP, copie' AlignColumns.py' a '% APPDATA% \ Notepad ++ \ plugins \ Config \ PythonScript \ scripts \' en su lugar. – DUzun

Cuestiones relacionadas