Notepad++ 6.8.8 我希望能够将几行以如下内容开头的代码转换为:
0,2,3,45,67,89,01,234,567,890,123,4567,8901
0,7,8,9,0,11,12,13,14,151,162,173,184
x,z,q,r,n,f,t,a,e,f,z,n,a
进入
0, 2,3, 45,67, 89,01, 234,567, 890,123, 4567,8901
0, 7,8, 9,0, 11,12, 13,14, 151,162, 173,184
x, z,q, r,n, f,t, a,e, f,z, n,a
第一个0,
逗号后有一个空格(第一个数字后面跟着逗号),然后每两个逗号后加一个空格。
- 不是每行都以 [zero] 开头。 有时
0
可以以任何数字或句点开头,也可以以单词开头。.
- 我希望每一行都被独立处理;保持它们单独的行内容(在搜索数字和逗号时,一行不能换到另一行)。
我可能遇到另一种情况,需要在第一个逗号后以 4 个为一组添加逗号后的空格。例如:
x,z,q,r,n,f,t,a,e,f,z,n,a
到
x, z,q,r,n, f,t,a,e, f,z,n,a
Notepad++ 是执行此操作的首选方法(正则表达式、宏等),但如果有帮助的话,我确实有 EmEditor、MS Word/Excel 2010。录制这样的宏很困难,因为每个逗号前后的字符数量可能不同。请解释一下您使用的语法,以防需要进行调整。
答案1
这里有一种方法可以在 Excel 中执行此操作,即在 A 列中粘贴行并将 workingRange 更改为范围。然后,您只需将 A 列复制回记事本即可
打开 ExcelDeveloper tab
并选择Visual Basic
[用于应用程序],或按Alt + F11
。
将以下代码复制到新模块中:
Option Explicit
Public Sub notepadthing()
Dim workingRange As Range
'Set your range here
Set workingRange = Range("A1:A3")
workingRange.TextToColumns _
Destination:=workingRange, _
DataType:=xlDelimited, _
TextQualifier:=xlTextQualifierNone, _
ConsecutiveDelimiter:=False, _
Tab:=False, _
Semicolon:=False, _
Comma:=True, _
Space:=False, _
Other:=False
Dim lastColumn As Long
Dim rowNumber As Long
Dim columnNumber As Long
Dim myString As String
For rowNumber = 1 To workingRange.rows.count
lastColumn = Cells(rowNumber, Columns.Count).End(xlToLeft).Column
myString = Cells(rowNumber, 1) & ", "
For columnNumber = 2 To lastColumn - 1
myString = myString & Cells(rowNumber, columnNumber) & ","
If columnNumber Mod 2 <> 0 Then myString = myString & " "
Next
Cells(rowNumber, 1) = myString & Cells(rowNumber, lastColumn)
Next
Application.ScreenUpdating = True
End Sub
将您想要格式化的电子表格设为当前电子表格。切换回 VBA 窗口并单击按钮Run
(看起来像 DVD 或音乐播放器上的播放按钮)
这只是将文本转换为列并连接。我相信有更简单的方法可以做到这一点。
间距的工作方式如下 -
For columnNumber = 2 To lastColumn - 1
myString = myString & Cells(rowNumber, columnNumber) & ","
If columnNumber Mod 2 <> 0 Then myString = myString & " "
Next
Cells(rowNumber, 1) = myString & Cells(rowNumber, lastColumn)
它总是会添加一个,
,但您可以决定何时添加空格。目前,第 1 列是单独的。因此,当我们遍历列时,奇数列需要空格
columnnumber Mod 2 <> 0
。
要改变这种情况,您需要按照以下逻辑进行:第 1 列后有一个空格,然后我需要 4 组,因此是第 5 列、第 9 列、第 13 列。但这些数字很难处理,而且它们只相差 1 到 4 的自然倍数。因此,如果我减去 1,然后检查是否能被 4 整除……
If (columnNumber - 1) Mod 4 = 0 Then myString = myString & " "