Created
November 20, 2025 12:45
-
-
Save rmorenobello/b8e3127ef6c72b024a7a646c1a584d7c to your computer and use it in GitHub Desktop.
Python scripts for Notepad++ to compress horizontally a text table with elements enclosed by " separated by spaces
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # -*- coding: utf-8 -*- | |
| # Script para Notepad++ usando el plugin PythonScript | |
| # Formatea tablas con columnas delimitadas por comillas dobles, manteniendo las comillas. | |
| # Se aplica a todo el contenido de la pestaña Notepad++ actual. | |
| # Deja sólo dos espacios entre el final del elemento más largo y la siguiente columna. | |
| # | |
| # "COL1" "COL2" "COL3" "COL1" "COL2" "COL3" | |
| # "VALUE1____________""" "VALUE3" --> "VALUE1____________" "" "VALUE3" | |
| from Npp import editor | |
| import re | |
| def format_table_with_quotes(): | |
| # Obtiene el texto seleccionado o todo el documento | |
| text = editor.getSelText() if editor.getSelText() else editor.getText() | |
| # Divide en líneas y elimina líneas vacías | |
| lines = [line.strip() for line in text.splitlines() if line.strip()] | |
| # Extraer columnas usando comillas como delimitador | |
| rows = [] | |
| for line in lines: | |
| # Encuentra todos los valores entre comillas | |
| parts = re.findall(r'"(.*?)"', line) | |
| rows.append(parts) | |
| # Calcular el ancho máximo de cada columna (incluyendo comillas) | |
| col_widths = [] | |
| for row in rows: | |
| for i, cell in enumerate(row): | |
| cell_with_quotes = '"' + cell + '"' | |
| if len(col_widths) <= i: | |
| col_widths.append(len(cell_with_quotes)) | |
| else: | |
| col_widths[i] = max(col_widths[i], len(cell_with_quotes)) | |
| # Construir la tabla formateada | |
| formatted_lines = [] | |
| for row in rows: | |
| formatted_row = '' | |
| for i, cell in enumerate(row): | |
| cell_with_quotes = '"' + cell + '"' | |
| formatted_row += cell_with_quotes.ljust(col_widths[i]) | |
| if i < len(row) - 1: | |
| formatted_row += ' ' # 2 espacios entre columnas | |
| formatted_lines.append(formatted_row.rstrip()) | |
| # Reemplazar el texto en el editor | |
| editor.replaceSel('\n'.join(formatted_lines)) | |
| # Ejecutar la función | |
| format_table_with_quotes() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # -*- coding: utf-8 -*- | |
| # Script para Notepad++ usando el plugin PythonScript | |
| # Formatea SOLO la tabla seleccionada con columnas delimitadas por comillas dobles. | |
| # Deja sólo dos espacios entre el final del elemento más largo y la siguiente columna. | |
| # | |
| # "COL1" "COL2" "COL3" "COL1" "COL2" "COL3" | |
| # "VALUE1____________""" "VALUE3" --> "VALUE1____________" "" "VALUE3" | |
| from Npp import editor | |
| import re | |
| def format_selected_table_with_quotes(): | |
| # Obtiene el texto seleccionado | |
| selected_text = editor.getSelText() | |
| # Si no hay texto seleccionado, no hacemos nada y salimos. | |
| if not selected_text: | |
| # Opcional: Puedes mostrar un mensaje al usuario | |
| # notepad.messageBox("Por favor, selecciona el texto de la tabla a formatear.", "Advertencia") | |
| return | |
| # Divide en líneas y elimina líneas vacías del texto seleccionado | |
| lines = [line.strip() for line in selected_text.splitlines() if line.strip()] | |
| # Extraer columnas usando comillas como delimitador | |
| rows = [] | |
| for line in lines: | |
| parts = re.findall(r'"(.*?)"', line) | |
| if parts: # Asegurarse de que se encontraron partes válidas | |
| rows.append(parts) | |
| # Opcional: Podrías añadir lógica aquí para líneas que no son parte de la tabla | |
| # pero para este script, si no tienen comillas, no se procesan como fila de tabla. | |
| # Si no se encontraron filas con el formato de comillas en la selección, | |
| # no hay nada que formatear. | |
| if not rows: | |
| return | |
| # Calcular el ancho máximo de cada columna (incluyendo comillas) | |
| col_widths = [0] * max(len(row) for row in rows) if rows else [] | |
| for row in rows: | |
| for i, cell in enumerate(row): | |
| cell_with_quotes = '"' + cell + '"' | |
| if i < len(col_widths): | |
| col_widths[i] = max(col_widths[i], len(cell_with_quotes)) | |
| else: # En caso de que una fila posterior tenga más columnas | |
| col_widths.append(len(cell_with_quotes)) | |
| # Construir la tabla formateada | |
| formatted_lines = [] | |
| for row in rows: | |
| formatted_row_parts = [] | |
| for i, cell in enumerate(row): | |
| cell_with_quotes = '"' + cell + '"' | |
| width = col_widths[i] if i < len(col_widths) else len(cell_with_quotes) | |
| formatted_row_parts.append(cell_with_quotes.ljust(width)) | |
| formatted_lines.append(' '.join(formatted_row_parts)) # 2 espacios entre columnas | |
| # Reemplazar el texto seleccionado con la tabla formateada | |
| # Esto reemplazará el texto exactamente donde estaba la selección original. | |
| editor.beginUndoAction() # Para que sea una sola acción de deshacer | |
| editor.replaceSel('\n'.join(formatted_lines)) | |
| editor.endUndoAction() # Finalizar acción de deshacer | |
| # Ejecutar la función cuando se invoca el script | |
| format_selected_table_with_quotes() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment