寻找一种简单的方法来alignment文本
我有一个常见的问题,我正在寻找解决scheme。 我有类似的文字行,我想以某种方式自动插入文本垂直alignment,以便:
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
这是一个文本问题。 input来自记事本。 输出将记事本。 这不是一个格式问题。
记事本++有一个插件,为您做到这一点。 这就是所谓的“ 代码alignment ”。 它允许您根据您select的字符垂直alignment文本。 您可以通过记事本的插件pipe理器来安装它。
以下是一个简单的使用场景。 首先使用下面的代码,然后通过插件的内置快捷方式/命令“equals”alignment。
之后,你会得到以下结果:
您还可以进一步使用“align by …”命令,该命令允许您指定任意alignmentstring。 在下面的例子中,我select了“#”字符,以便将我的注释相互alignment。 这可能是一个更长的string,而不是长度为1的string。
最终结果如下:
如果要按特定字符alignment,请使用Notepad ++扩展TextFX。
看看:TextFX> TextFX Edit>按(,)排列多行
还有:按(=)排列多行,按(剪贴板字符)排列多行,
这里有一个有用的编程技巧链接。
http://techbrij.com/518/10-notepad-tips-tricks-fast-development
你没有列出一个编程语言,所以这里有一些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必须大于或等于每行的段数。 如果你愿意的话,你可以让这个号码不被固定一点点工作。
基本上这个algorithm是基于空格分割每一行,然后对每个部分计算最大值到一个公共数组。 最后,它循环遍历所有这些分割的部分,并使用空格将其左alignment打印到最大尺寸(加上1以获得项目之间的空间)。
我已经创build了Python脚本,可以在Notepad ++中使用Python脚本插件: nppPyAlignColumn