|
楼主 |
发表于 2019-3-27 13:27
|
显示全部楼层
老师,您好!能帮忙把您的原来程序加上, 单个处理TXT / 所有TXT文件一起处理 (去掉不规则行) 的功能吗? 最后的生成的文本就是在原文件名后加 "- 调整" 字符. 谢谢您. 本人太笨, 实在不会改了.
Sub Main()
'Date:2019/2/27 正月廿三 Wednesday
'标签:读文本,乱码,写文本,txt文本文件,去掉货描,颜色里面的不规则断行
Dim temptext As String, textarr, arr, i As Long, k As Long
Dim brr, j As Long, 你的文件路径 As String, 生成文本路径 As String
Dim filename(), fileopen, ii
If MsgBox("处理全部文件?", vbYesNo, "提示") = vbNo Then '单个
fileopen = Application.GetOpenFilename("Text Files (*.txt), *.txt", , "选取文件")
If fileopen = False Then Exit Sub
If LCase(Right(fileopen, Len("_cn.txt"))) <> "_cn.txt" Then MsgBox "_cn.txt文件!": Exit Sub
ReDim filename(1 To 1): filename(1) = fileopen
Else '全部
If Not getfilename(filename, ThisWorkbook.path, "_cn.txt") Then MsgBox "文件!": Exit Sub
End If
For ii = 1 To UBound(filename)
With CreateObject("ADODB.Stream")
.Type = 2
.Mode = 3
.Open
.LoadFromFile filename(ii)
.Charset = "UTF-8"
.Position = 5
.Close
End With
Next
temptext = fileopen
textarr = Split(temptext, vbCrLf)
ReDim arr(UBound(textarr))
For i = 0 To UBound(textarr)
If InStr(textarr(i), "產品內容") > 0 Then
arr(k) = textarr(i)
For Each brr In Array("產品顏色明細", "印刷在外箱上的颜色")
For j = i + 1 To UBound(textarr)
If InStr(textarr(j), brr) > 0 Then
k = k + 1
arr(k) = textarr(j)
Exit For
Else
arr(k) = arr(k) & Trim(textarr(j))
End If
Next
i = j
Next
k = k + 1
Else
arr(k) = textarr(i)
k = k + 1
End If
Next
With CreateObject("ADODB.Stream")
.Type = 2
.Mode = 3
.Charset = "utf-8"
.Open
.WriteText Join(arr, vbCrLf)
.SaveToFile Left(filename(ii), Len(filename(ii)) - 4) & "-输出.txt", 2
.flush
.Close
End With
MsgBox "完成"
End Sub
Function ReadUTF(ByRef filename() As String) As String
With CreateObject("ADODB.Stream")
.Type = 2
.Mode = 3
.Open
.LoadFromFile filename(ii)
.Charset = "UTF-8"
.Position = 5
ReadUTF = .ReadText
.Close
End With
End Function
Function getfilename(filename, pth, mark) As Boolean
Dim f, n
If Right(pth, 1) <> "\" Then pth = pth & "\"
f = Dir(pth & "*.*")
Do While Len(f) > 0
If LCase(Right(f, Len(mark))) = LCase(mark) Then
n = n + 1: ReDim Preserve filename(1 To n)
filename(n) = pth & f
End If
f = Dir
Loop
If n > 0 Then getfilename = True
End Function
|
|