【问题标题】:Importing a raw file in a specific way以特定方式导入原始文件
【发布时间】:2014-08-22 04:12:02
【问题描述】:

我想导入一个非纯文本的原始文件。 我要导入的值是我需要导入的单行字符,拆分为单个字符,然后转换为 00 到 FF 之间的十六进制值。 有 49152 个字符,我希望它分 3 列导入。一个 3 x 16384 像这样:

01 02 03
04 05 06

↓this↓ 有效,但不给出前导零。 (1 应该是 01)。此外,它会忽略不涵盖所有三列的值。↓

子演示() 暗淡为字符串 Dim dat 作为变体 将 fn 变暗为整数 Dim rOutput As Range 将 idx 调暗 调暗文件长度 昏暗的v

fn = FreeFile
fl = "C:\Users\1097180551N\Desktop\untitled.png"

Set rOutput = [A1]

Open fl For Binary Access Read As #fn

FileLength = LOF(fn)
ReDim dat(1 To FileLength \ 3, 1 To 3)

For idx = 1 To UBound(dat, 1)
    v = Input(3, #fn)
    dat(idx, 1) = Hex(Asc(Mid$(v, 1, 1)))
    dat(idx, 2) = Hex(Asc(Mid$(v, 2, 1)))
    dat(idx, 3) = Hex(Asc(Mid$(v, 3, 1)))
Next
rOutput.Resize(UBound(dat, 1), 3) = dat
Close #fn
End Sub

【问题讨论】:

    标签: excel vba parsing import


    【解决方案1】:

    您的最后一次更新代码快到了。我会将文件读取为 Binary 而不是 Input,然后将字符转换为可打印的形式。此外,使用变体数组会比直接写入工作表更快

    Sub Demo()
        Dim fl As String
        Dim dat As Variant
        Dim fn As Integer
        Dim rOutput As Range
        Dim idx As Long
        Dim FileLength As Long
        Dim v
    
        fn = FreeFile
        fl = "C:\Users\1097180551N\Desktop\txt.raw"
    
        Set rOutput = [A1]
    
        Open fl For Binary Access Read As #fn
    
        FileLength = LOF(fn)
        ReDim dat(1 To FileLength \ 3, 1 To 3)
    
        For idx = 1 To UBound(dat, 1)
            v = Input(3, #fn)
            dat(idx, 1) = Hex(Asc(Mid$(v, 1, 1)))
            dat(idx, 2) = Hex(Asc(Mid$(v, 2, 1)))
            dat(idx, 3) = Hex(Asc(Mid$(v, 3, 1)))
        Next
        rOutput.Resize(UBound(dat, 1), 3) = dat
    
        Close #fn
    End Sub
    

    【讨论】:

    • ++ 同意。我会为变量使用一些更合理的名称,但这只是我猜的偏好问题。填充dat() 的部分也可以放入一个小的 1-3 循环中;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多