我有一个常见的问题,我正在寻找解决方案。 我有类似文本的行我想以某种方式自动插入文本以垂直对齐它们 这样:
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
变成这个
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
这是一个文字问题。输入来自记事本。输出将转到记事本。这不是格式化问题。
答案 0 :(得分:58)
Notepad ++有一个插件可以帮到你。它被称为“Code alignment”。它允许您根据您选择的字符垂直对齐文本。您可以通过插件管理器为记事本安装它。
以下是一个简单的使用场景。首先使用以下代码,然后使用“equals”对齐,这是插件的内置快捷方式/命令。
之后,您最终得到以下内容:
您还可以更进一步使用“align by ...”命令,该命令允许您指定任意对齐字符串。在下面的示例中,我选择了“#”字符,以便将我的注释彼此相邻。这可能很容易就是一个较长的字符串,而不是长度为1的字符串。
以下结果:
答案 1 :(得分:29)
如果要按特定字符对齐,请使用Notepad ++扩展名TextFX。
看看:TextFX> TextFX编辑>按(,)
排列多行还有:按(=)排列多行,并按(剪贴板字符)排列多行
以下是有关编程的有用提示的链接。
http://techbrij.com/518/10-notepad-tips-tricks-fast-development
答案 2 :(得分:3)
Notepad ++ TextFX不再受支持和维护。代码对齐插件仅对齐列对齐字符的第一个匹配项。
我使用免费的在线服务解决了这个问题: https://onlinetexttools.com/convert-text-to-nice-columns
答案 3 :(得分:0)
您没有列出编程语言,因此这里有一些执行请求操作的C#:
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();
}
请注意,100必须大于或等于每行的段数。如果你愿意,你可以用一点点工作来解决这个问题。
基本上这个算法根据空格分割每一行,然后为每个部分计算最大值到一个公共数组。最后,它循环遍历所有这些分段部分,并使用空格将它们左对齐打印到最大尺寸(加1以获得项目之间的空间)。
答案 4 :(得分:0)
我创建了一个可以在Notepad ++中与Python Script Plugin一起使用的Python脚本:nppPyAlignColumn
答案 5 :(得分:0)
ElasticTabstops实际上确实可以满足您在使用标签页时所寻找的工作。 对齐而不添加字符(空格或制表符)。