从大量文本文件中提取单行数据并导入 Excel - 具有不同的字符串长度
Extract a single line of data from numerous text files and import into Excel - with different string lengths
我不想劫持一个线程,但我正在处理这个 OP 的应用程序:
那里的解决方案非常棒,适用于他的应用程序:
Sub ExtractGPS()
Dim filename As String, nextrow As Long, MyFolder As String
Dim MyFile As String, text As String, textline As String, posGPS As String
MyFolder = "C:\Users\Desktop\Test\"
MyFile = Dir(MyFolder & "*.txt")
Do While MyFile <> ""
Open (MyFolder & MyFile) For Input As #1
Do Until EOF(1)
Line Input #1, textline
text = text & textline
Loop
Close #1
MyFile = Dir()
posGPS = InStr(text, "GPS Position")
nextrow = Sheet1.Cells(Rows.Count, "A").End(xlUp).row + 1
Sheet1.Cells(nextrow, "A").Value = Mid(text, posGPS + 33, 37)
Loop
End Sub
所以我也需要从多个文本文件中提取文本,但是对于我的应用程序,我将有不同大小的字符串长度,长度并不总是等于 37 个字符。
Sheet1.Cells(nextrow, "A").Value = Mid(text, posGPS + 33, 37)
...
for example:
GPS Position : 50 deg 7' 33.40" N, 5 deg 30' 4.06" W
GPS Position : 20 deg 7' 22.0" N, 9 deg 2' 3.5" W
GPS Position : 50 deg 7' 29.401" N, 5 deg 20' 9.095" W
我是 VBA 的菜鸟,但我的知识足以让事情发生。对我来说,似乎必须有一种方法来指定直到行尾。或者我需要创建一个变量来计算字符数,直到找到马车或类似的东西。
很明显,在 OP 的原始应用程序中,字符串长度不会改变,并且上面的 GPS 位置永远不会像我上面那样打印出来。如果有人可以帮助我完成我的申请,我将不胜感激。
麦克
您可以使用 InStr
到 return 下一个换行符的索引,并通过一些数学运算将其用作 Mid
的长度参数。喜欢:
Mid(Text, posGPS + 33, InStr(posGPS, Text, vbCr) - posGPS - 33)
注意:如果 vbCr
不起作用,您也可以尝试 vbLf
。
我不想劫持一个线程,但我正在处理这个 OP 的应用程序:
那里的解决方案非常棒,适用于他的应用程序:
Sub ExtractGPS()
Dim filename As String, nextrow As Long, MyFolder As String
Dim MyFile As String, text As String, textline As String, posGPS As String
MyFolder = "C:\Users\Desktop\Test\"
MyFile = Dir(MyFolder & "*.txt")
Do While MyFile <> ""
Open (MyFolder & MyFile) For Input As #1
Do Until EOF(1)
Line Input #1, textline
text = text & textline
Loop
Close #1
MyFile = Dir()
posGPS = InStr(text, "GPS Position")
nextrow = Sheet1.Cells(Rows.Count, "A").End(xlUp).row + 1
Sheet1.Cells(nextrow, "A").Value = Mid(text, posGPS + 33, 37)
Loop
End Sub
所以我也需要从多个文本文件中提取文本,但是对于我的应用程序,我将有不同大小的字符串长度,长度并不总是等于 37 个字符。
Sheet1.Cells(nextrow, "A").Value = Mid(text, posGPS + 33, 37)
...
for example:
GPS Position : 50 deg 7' 33.40" N, 5 deg 30' 4.06" W
GPS Position : 20 deg 7' 22.0" N, 9 deg 2' 3.5" W
GPS Position : 50 deg 7' 29.401" N, 5 deg 20' 9.095" W
我是 VBA 的菜鸟,但我的知识足以让事情发生。对我来说,似乎必须有一种方法来指定直到行尾。或者我需要创建一个变量来计算字符数,直到找到马车或类似的东西。
很明显,在 OP 的原始应用程序中,字符串长度不会改变,并且上面的 GPS 位置永远不会像我上面那样打印出来。如果有人可以帮助我完成我的申请,我将不胜感激。
麦克
您可以使用 InStr
到 return 下一个换行符的索引,并通过一些数学运算将其用作 Mid
的长度参数。喜欢:
Mid(Text, posGPS + 33, InStr(posGPS, Text, vbCr) - posGPS - 33)
注意:如果 vbCr
不起作用,您也可以尝试 vbLf
。