txt 文件关闭大约 10000 行输入
Txt file close around 10000 lines of input
我已经用 excel 和一个宏编写了好几次 txt 文件。我没有达到 10000 行或更多。永不言败...
我的 .csv 文件有超过 87000 行,例如 "15k50,CityABC,56ab,CountryofCity,ID,Street"。我使用 Split() 函数来分隔值。宏格式化值并将其作为单行写入 txt 文件。
txt 文件关闭了大约 9800 行...但是为什么呢?我尝试使用 Slepp() 来确保打印算法没有超载或其他原因。
计数器 10000 在那里是因为我想让你更容易理解。如果超过 10000,则问题“已解决”。
信息txt-文件格式:
- ASCII
- Unix (LF)
捷径,经过多次评论
- with Minimal, Reproducible Example 过度使用代码(删除睡眠,简化变量名,尝试从头开始编写代码)
- 已将
SplitString()
更改为 Split()
,因为调用函数很愚蠢...
- 将第 9000 行打印到 txt 文件后,在代码行
fso.WriteLine ("# " & strArr(0) & " # " & strArr(1) & ...
处弹出以下错误消息“运行-Time Error 5: Invalid Procedure Call or Argument”
Option Explicit
#If VBA7 Then
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) 'For 64 Bit Systems
#Else
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 'For 32 Bit Systems
#End If
Sub formattedToTxt()
Dim strArr() As String
Dim strB As String
Dim intC As Integer
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
strB = filePathExport & "\" & filenameExport & fileFormatExport
Set fso = fso.CreateTextFile(strB, True)
Do While counter <= 10000
strArr = Split(ActiveCell.Value, ",")
intC = CalcWhitespace(strArr(5), 40)
fso.WriteLine ("# " & strArr(0) & " # " & strArr(1) & " # " & strArr(2) & " # " & strArr(3) & " # " & strArr(4) & " # " & strArr(5) & Space(intC) & "#")
ActiveCell.Offset(1, 0).Select
If ((counter Mod 1000) = 0) Then
Debug.Print ("Entry " & counter & " written")
End If
counter = counter + 1
Loop
End Sub
Function CalcWhitespace(rawStr As String, maxLen As Integer) As Integer
CalcWhitespace = maxLen - Len(rawStr)
End Function
有什么想法吗?
感谢以上评论中所有 VBA 提供帮助的人。我清理了代码。以下片段是完整的解决方案。
.csv table 包含每行不同长度的不同字符串。
在最终解决方案中,之前检查了空格。重要的是要知道数据中的最大长度字符串。格式化可读的 txt 文件输出。
也许,其他解决方案具有更好的性能,但在我的情况下效果很好。
祝你有愉快的一天!
'Find max string length for each whitespace
counter = 0
ActiveSheet.Cells(2, 1).Select 'ignore Headlinedata, because diffrent format in compare to data
intC = (UBound(arrWhitespace) - LBound(arrWhitespace))
Do While ActiveCell.Value <> ""
strArr = Split(ActiveCell.Value, ",")
For counterTwo = 0 To intC
If Len(strArr(counterTwo)) > arrWhitespace(counterTwo) Then arrWhitespace(counterTwo) = Len(strTempArr(counterTwo))
Next counterTwo
counter = counter + 1
ActiveCell.Offset(1, 0).Select
If ((counter Mod 1000) = 0) Then
Debug.Print ("Entry " & counter & " checked")
End If
Loop
'Print Body of txt-file
Do While ActiveCell.Value <> ""
strArr = Split(ActiveCell.Value, ",")
'build string for each line
strB = ""
strB = strB & "# " & strArr(0) & " #"
intC = CalcWhitespace(strArr(1), arrWhitespace(1))
strB = strB & " " & strArr(1) & Space(intC) & " #"
intC = CalcWhitespace(strArr(2), arrWhitespace(2))
strB = strB & " " & strArr(2) & Space(intC) & " #"
intC = CalcWhitespace(strArr(3), arrWhitespace(3))
strB = strB & " " & strArr(3) & Space(intC) & " #"
intC = CalcWhitespace(strArr(4), arrWhitespace(4))
strB = strB & " " & strArr(4) & Space(intC) & " #"
intC = CalcWhitespace(strArr(5), arrWhitespace(5))
strB = strB & " " & strArr(5) & Space(intC) & " #"
fso.WriteLine (strB)
ActiveCell.Offset(1, 0).Select
If ((counter Mod 1000) = 0) Then
Debug.Print ("Entry " & counter & " written")
End If
counter = counter + 1
Loop
Function CalcWhitespace(rawStr As String, maxLen As Integer) As Integer
CalcWhitespace = maxLen - Len(rawStr)
End Function
下次我会用minimal-reproducible-example来避免.Select
我已经用 excel 和一个宏编写了好几次 txt 文件。我没有达到 10000 行或更多。永不言败...
我的 .csv 文件有超过 87000 行,例如 "15k50,CityABC,56ab,CountryofCity,ID,Street"。我使用 Split() 函数来分隔值。宏格式化值并将其作为单行写入 txt 文件。
txt 文件关闭了大约 9800 行...但是为什么呢?我尝试使用 Slepp() 来确保打印算法没有超载或其他原因。
计数器 10000 在那里是因为我想让你更容易理解。如果超过 10000,则问题“已解决”。
信息txt-文件格式:
- ASCII
- Unix (LF)
捷径,经过多次评论
- with Minimal, Reproducible Example 过度使用代码(删除睡眠,简化变量名,尝试从头开始编写代码)
- 已将
SplitString()
更改为Split()
,因为调用函数很愚蠢... - 将第 9000 行打印到 txt 文件后,在代码行
fso.WriteLine ("# " & strArr(0) & " # " & strArr(1) & ...
处弹出以下错误消息“运行-Time Error 5: Invalid Procedure Call or Argument”
Option Explicit
#If VBA7 Then
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) 'For 64 Bit Systems
#Else
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 'For 32 Bit Systems
#End If
Sub formattedToTxt()
Dim strArr() As String
Dim strB As String
Dim intC As Integer
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
strB = filePathExport & "\" & filenameExport & fileFormatExport
Set fso = fso.CreateTextFile(strB, True)
Do While counter <= 10000
strArr = Split(ActiveCell.Value, ",")
intC = CalcWhitespace(strArr(5), 40)
fso.WriteLine ("# " & strArr(0) & " # " & strArr(1) & " # " & strArr(2) & " # " & strArr(3) & " # " & strArr(4) & " # " & strArr(5) & Space(intC) & "#")
ActiveCell.Offset(1, 0).Select
If ((counter Mod 1000) = 0) Then
Debug.Print ("Entry " & counter & " written")
End If
counter = counter + 1
Loop
End Sub
Function CalcWhitespace(rawStr As String, maxLen As Integer) As Integer
CalcWhitespace = maxLen - Len(rawStr)
End Function
有什么想法吗?
感谢以上评论中所有 VBA 提供帮助的人。我清理了代码。以下片段是完整的解决方案。
.csv table 包含每行不同长度的不同字符串。 在最终解决方案中,之前检查了空格。重要的是要知道数据中的最大长度字符串。格式化可读的 txt 文件输出。
也许,其他解决方案具有更好的性能,但在我的情况下效果很好。
祝你有愉快的一天!
'Find max string length for each whitespace
counter = 0
ActiveSheet.Cells(2, 1).Select 'ignore Headlinedata, because diffrent format in compare to data
intC = (UBound(arrWhitespace) - LBound(arrWhitespace))
Do While ActiveCell.Value <> ""
strArr = Split(ActiveCell.Value, ",")
For counterTwo = 0 To intC
If Len(strArr(counterTwo)) > arrWhitespace(counterTwo) Then arrWhitespace(counterTwo) = Len(strTempArr(counterTwo))
Next counterTwo
counter = counter + 1
ActiveCell.Offset(1, 0).Select
If ((counter Mod 1000) = 0) Then
Debug.Print ("Entry " & counter & " checked")
End If
Loop
'Print Body of txt-file
Do While ActiveCell.Value <> ""
strArr = Split(ActiveCell.Value, ",")
'build string for each line
strB = ""
strB = strB & "# " & strArr(0) & " #"
intC = CalcWhitespace(strArr(1), arrWhitespace(1))
strB = strB & " " & strArr(1) & Space(intC) & " #"
intC = CalcWhitespace(strArr(2), arrWhitespace(2))
strB = strB & " " & strArr(2) & Space(intC) & " #"
intC = CalcWhitespace(strArr(3), arrWhitespace(3))
strB = strB & " " & strArr(3) & Space(intC) & " #"
intC = CalcWhitespace(strArr(4), arrWhitespace(4))
strB = strB & " " & strArr(4) & Space(intC) & " #"
intC = CalcWhitespace(strArr(5), arrWhitespace(5))
strB = strB & " " & strArr(5) & Space(intC) & " #"
fso.WriteLine (strB)
ActiveCell.Offset(1, 0).Select
If ((counter Mod 1000) = 0) Then
Debug.Print ("Entry " & counter & " written")
End If
counter = counter + 1
Loop
Function CalcWhitespace(rawStr As String, maxLen As Integer) As Integer
CalcWhitespace = maxLen - Len(rawStr)
End Function
下次我会用minimal-reproducible-example来避免.Select