VB6拆分Unicode文本文件适配Access MDB备注字段
问题描述
我有一个Windows环境下每行以Chr(13)结尾的大型Unicode文本文件,需要存入Access MDB数据库的备注字段(最大容量限制64K)。请问如何使用VB6的Line Input方法将文本拆分为多个小文件?或有无无需编程的更佳替代方案?
文本示例:
1 00:00:01,960 --> 00:00:04,880 哦哦,向前一迎就上
2 00:00:04,880 --> 00:00:07,600 去。我都跟你讲,拉球摩擦是需要
3 00:00:07,600 --> 00:00:10,480 顶,没有顶它,它不是一个
4 00:00:10,480 --> 00:00:13,280 单纯的往上的动作,它需要一边
5 00:00:13,280 --> 00:00:16,240 往前顶,找到球的时候给一个小的动
VB6 拆分方案(基于Line Input优化)
你提供的现有代码存在几个关键问题:未处理Unicode编码、对字节容量计算错误(Access备注字段64K是字节数,Unicode每个字符占2字节)、未定义WriteFile子过程,且可能在拆分时截断单行内容。以下是修正后的完整实现:
Public Sub SplitUnicodeTextFile() Dim partCount As Long Dim outContent As String Dim inputLine As String Dim inputPath As String Dim maxByteSize As Long ' Access备注字段最大64K字节,Unicode每个字符占2字节,预留4K冗余空间避免溢出 maxByteSize = 60000 inputPath = "speechByParts.txt" partCount = 0 outContent = "" ' 以Unicode模式打开输入文件 Open inputPath For Input As #1 Len = 1 ' Len=1指定按Unicode读取 Do While Not EOF(1) Line Input #1, inputLine ' 还原每行末尾的Chr(13) inputLine = inputLine & Chr(13) ' 检查添加当前行后是否超过容量限制 If (LenB(outContent) + LenB(inputLine)) > maxByteSize Then ' 先保存当前已累积的内容 partCount = partCount + 1 SaveUnicodeFile "speechByParts_" & partCount & ".txt", outContent outContent = inputLine ' 将当前行作为新文件的起始 Else outContent = outContent & inputLine End If Loop ' 保存最后剩余的内容 If outContent <> "" Then partCount = partCount + 1 SaveUnicodeFile "speechByParts_" & partCount & ".txt", outContent End If Close #1 End Sub ' 辅助子过程:保存Unicode文本文件 Private Sub SaveUnicodeFile(filePath As String, content As String) Open filePath For Output As #2 Len = 1 Print #2, content Close #2 End Sub
关键优化说明
- 用
Open ... Len = 1指定Unicode编码读写,避免乱码 - 用
LenB计算字节数(而非Len的字符数),精准匹配Access备注字段的字节限制 - 拆分时优先保证整行完整性,不会截断单行内容
- 预留冗余空间,避免因额外字符导致溢出
无需编程的替代方案
方法1:Notepad++手动分块保存
- 用Notepad++打开目标Unicode文本文件
- 按
Ctrl+G打开定位窗口,根据每行平均长度估算行号(确保选中内容字节数不超64K) - 选中从文件开头到定位行的内容,按
Ctrl+Shift+S另存为新文件 - 重复上述步骤,直到拆分完所有内容
方法2:PowerShell脚本一键拆分
创建后缀为.ps1的脚本文件,内容如下:
$inputPath = "speechByParts.txt" $maxBytes = 60000 # 预留冗余的64K字节限制 $partCount = 1 $currentContent = "" Get-Content -Path $inputPath -Encoding Unicode | ForEach-Object { $line = $_ + "`r" # 还原Chr(13)换行符 $lineBytes = [System.Text.Encoding]::Unicode.GetByteCount($line) $currentBytes = [System.Text.Encoding]::Unicode.GetByteCount($currentContent) if ($currentBytes + $lineBytes -gt $maxBytes) { $outputPath = "speechByParts_$partCount.txt" [System.IO.File]::WriteAllText($outputPath, $currentContent, [System.Text.Encoding]::Unicode) $currentContent = $line $partCount++ } else { $currentContent += $line } } # 保存最后一部分 if ($currentContent -ne "") { $outputPath = "speechByParts_$partCount.txt" [System.IO.File]::WriteAllText($outputPath, $currentContent, [System.Text.Encoding]::Unicode) }
右键点击脚本文件,选择“用PowerShell运行”即可自动完成拆分。
内容的提问来源于stack exchange,提问作者DriveCarefully
相关产品推荐
相关产品推荐

