我有一个.txt
文件,其中列以|
(管道)分隔,但行使用以下字符串分隔:_ ~|~ _
有没有办法通过基于字符串分隔行来导入它?如果我能做到这一点,我将能够轻松地对列进行文本处理。
这很棘手,因为记事本中每行的空间都已用尽。例如:
Policy|Name|Cost _ ~|~ _ 11924|Joe|$20 _ ~|~ _ 154 (end of notepad space)
35|Bob|$40 _ ~|~ _ 18439|Jane|$30 _ ~|~ _ 18492|Ri
chard|$50
我需要阅读:
Policy Name Cost
11924 Joe $20
15435 Bob $40
18439 Jane $30
18492 Richard $50
等等。请注意,最右边的值是分开的,因为记事本已经耗尽了它的行长度。
感谢您的任何想法!
答案 0 :(得分:0)
您可以使用更强大的文本编辑器(例如TextPad)导入Excel之前预处理文本。
在TextPad中,执行替换(F8键)。首先让我们摆脱你所谓的“记事本空间结束”,我将其视为换行符。
使用正则表达式替换双回车“\ n \ n”,不带任何内容:
然后,更换管道“\ |”空格“”:
然后,用回车符“\ n”替换“_ ~~ _”:
这是应该准备导入Excel的最终文本:
希望有所帮助! TextPad是一个很棒的工具。
答案 1 :(得分:0)
您可以使用VBA宏一步完成此操作。
newline
个字符Option Explicit
'SET REFERENCE to Microsoft Scripting Runtime
Sub ImportSpecial()
Dim FSO As FileSystemObject
Dim TS As TextStream
Dim sFN As Variant
Dim S As String
Dim V As Variant
Dim R As Range
sFN = Application.GetOpenFilename("Text Files (*.txt), *.txt")
If Not sFN = False Then
Set FSO = New FileSystemObject
Set TS = FSO.OpenTextFile(sFN, ForReading, False, TristateFalse)
'Remove the linefeeds
S = TS.ReadAll
S = Replace(S, vbNewLine, "")
'If data is large, will need to transpose manually
V = Application.WorksheetFunction.Transpose(Split(S, "_ ~|~ _"))
Set R = ActiveSheet.Cells(1, 1).Resize(UBound(V), 1)
With R
.EntireColumn.Clear
.Value = V
.TextToColumns Destination:=R(1), _
DataType:=xlDelimited, _
Tab:=False, semicolon:=False, comma:=False, Space:=False, _
other:=True, otherchar:="|"
.EntireColumn.AutoFit
End With
End If
End Sub