`

VBA文件处理(UTF-8)

 
阅读更多
Option Explicit
'--------------------------------------------------------
'[Class name]:  clsTxtFile
'[Description]:      Read Or Write Txt File
'--------------------------------------------------------

Private mFileNumber As Integer
Private mIsOpen As Boolean
Private mEncoding As String
Private mStream As Object
Private mFilePath As String

'--------------------------------------------------------
'[Function name]:  OpenFile
'[Description]:    Open file
'[Parameter]:    (1) file path (2)encoding (eg:utf-8)
'--------------------------------------------------------
Public Sub OpenFile(path As String, encoding As String)
    
    mEncoding = encoding
    mFilePath = path
    If mEncoding <> "" Then
        Set mStream = CreateObject("Adodb.Stream")
        With mStream
            .Type = 2 '1:binary 2:text
            .Mode = 3 '1:Read 2:Write 3:ReadWrite
            .Open
            .LoadFromFile path
            .Charset = "UTF-8"
            .Position = 2 'encoding's position
        End With
    Else
        mFileNumber = FreeFile
        Open path For Input As #mFileNumber
    End If
    mIsOpen = True
End Sub

'--------------------------------------------------------
'[Function name]:  CreateFile
'[Description]:    Create file
'[Parameter]:    (1) file path (2)encoding
'--------------------------------------------------------
Public Sub CreateFile(path As String, encoding As String)
    
    mEncoding = encoding
    mFilePath = path
    
    CreateFileCore (path)
    
    If mEncoding <> "" Then
        Set mStream = CreateObject("Adodb.Stream")
        With mStream
            .Type = 2 '1:binary 2:text
            .Mode = 3 '1:Read 2:Write 3:ReadWrite
            .Open
            .Charset = "UTF-8"
        End With
    Else
        mFileNumber = FreeFile
        Open path For Binary Access Write As #mFileNumber
    End If
    mIsOpen = True
End Sub

'--------------------------------------------------------
'[Function name]:  CreateFileCore
'[Description]:    cretae file 
'[Parameter]:    (1) file path
'--------------------------------------------------------
Private Sub CreateFileCore(path As String)

    Dim fso As Object
    Dim folderName As String
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    If fso.FileExists(path) Then
        'file exists,delete
        fso.DeleteFile path, True
    Else
       'file not exists,create 
        folderName = fso.GetParentFolderName(path)
        If Not fso.FolderExists(folderName) Then
            fso.CreateFolder (folderName)
        End If
    End If
    
    fso.CreateTextFile path, True
End Sub

'--------------------------------------------------------
'[Function name]:  ReadLine
'[Description]:   read  a line
'[Return Value]:  line string
'--------------------------------------------------------
Public Function ReadLine() As String
    
    Dim strLine As String
    If mEncoding <> "" Then
        strLine = mStream.ReadText(-2) '-1:adReadAll -2:adReadLine
    Else
        Line Input #mFileNumber, strLine
    End If
    
    ReadLine = strLine
End Function

'--------------------------------------------------------
'[Function name]:  WriteLine
'[Description]:    Write line
'[Parameter]:    (1) line
'--------------------------------------------------------
Public Sub WriteLine(strLine As String)

    If mEncoding <> "" Then
        Call mStream.WriteText(strLine, 1)  '0:adWriteChar 1:adWriteLine
    Else
        strLine = strLine & vbCrLf
        Put #mFileNumber, , strLine
    End If
End Sub

'--------------------------------------------------------
'[Function name]:  IsEndOfFile
'[Description]:    if is the end of the file
'[Return Value]:  true:end of the file false:not end of the file
'--------------------------------------------------------
Public Function IsEndOfFile() As Boolean

    If mEncoding <> "" Then
        IsEndOfFile = mStream.EOS
    Else
        IsEndOfFile = EOF(mFileNumber)
    End If
End Function

'--------------------------------------------------------
'[Function name]:  CloseFile
'[Description]:    close file
'--------------------------------------------------------
Public Sub CloseFile()
        
    If mIsOpen Then
        If mEncoding <> "" Then
            mStream.SaveToFile mFilePath, 2 'adSaveCreateNotExist =1 adSaveCreateOverWrite = 2
            mStream.Close
            Set mStream = Nothing
        Else
            Close mFileNumber
        End If
    End If
End Sub

 

分享到:
评论

相关推荐

    VBA Fans读取和写入UTF-8格式文本文件

    如果频繁处理UTF-8文件,可以考虑使用如`VBA7.Filesystem`这样的库,它提供了对UTF-8文件更方便的支持。 7. **实际应用** 这种技术在处理CSV文件、日志文件或从网络下载的文本数据时非常有用,特别是当这些数据...

    VB中ANSI转换成UTF-8

    ANSI和UTF-8是两种常见的字符编码标准,它们在处理多语言字符时有着不同的特性。本文将深入探讨如何在VB中将ANSI编码转换为UTF-8编码,以及在实际应用中的网络编程基础知识,特别是利用Winsock控件实现简单的聊天...

    VB6.0 UTF-8转换GB2312函数

    在VB6.0编程环境中,有时我们需要处理不同字符编码之间的转换,例如将UTF-8编码的字符串转换为GB2312编码。UTF-8是一种广泛使用的Unicode编码,而GB2312是中国大陆常用的简体中文字符集,主要用于早期的计算机系统。...

    一组测试ANSI文件与UTF-8文件的程序

    2. 同样打开一个UTF-8编码的文件,将Charset设置为"UTF-8",再次读取内容。 3. 比较两者的读取结果,确保正确解析了字符。 4. 对于写入操作,可能涉及将文本转换为不同的编码并写入新的文件,然后验证写入的文件是否...

    vb utf8转Unicode

    3. **多字节处理**:对于多字节的UTF-8字符,通过计算合并各个字节的值,得到最终的Unicode码点。 4. **异常处理**:如果输入的UTF-8字节数组长度不足,则输出问号“?”代替无法解析的字符。 #### 六、总结 通过...

    Excel-VBA实用技巧范例-将工作表数据保存为文本文件.zip

    12. **文本文件编码**:保存文本文件时,需要考虑编码问题,如ASCII、UTF-8等,避免出现乱码。在VBA中,可以设置Stream对象的Encoding属性来指定。 通过学习和理解以上知识点,你可以根据提供的压缩包内容,编写...

    VB版完整无错的MD5/UTF8,BASE64等编码

    "VBCode.bas"可能包含了实现MD5、UTF-8和BASE64编码的VB代码模块,"Form1.frm"是VB的用户界面设计文件,"测试工程.vbp"是VB项目文件,保存了工程的配置和组件信息,而".vbw"则是工作空间文件,记录了用户的工作状态...

    asp中通过fso读取和生成UTF-8编码的txt

    在ASP(Active Server Pages)开发中,我们有时需要读取或生成UTF-8编码的文本文件,例如TXT或HTML文件。...这种方法对于处理多语言网站或需要保持与服务器上其他UTF-8编码文件一致性的场景尤其有用。

    文件编码批量转换程序

    '* 程序功能:将 GB、BIG5、UTF-8 文件相互转换,方便的批量处理能力, '* 主要用于网站文件编码方式的整体转换上。 '* '* 特别提醒:程序不保证文件绝对安全,使用前请备份! '* '* 开发环境:Visual Basic6.0(SP6)...

    asp createTextFile生成文本文件支持utf8

    然而,当需要生成特定编码格式的文本文件时,比如UTF-8编码,就需要对标准的CreateTextFile方法进行扩展,以确保文件内容的正确编码。 首先,需要了解CreateTextFile方法的用法。这个方法属于FileSystemObject对象...

    如何将一个ansi的文本文件转为unicode格式

    将ANSI文本文件转换为Unicode格式是编程和文件处理中常见的需求,尤其是在处理包含多语言或特殊字符的数据时。在给定的文件信息中,提到了几种不同的方法和过程,包括`TGBUCS.GB_USC2`、`TopAnsiToUTF8`、`UTF8To...

    通讯录导出Excel破乱码

    如果编码不是UTF-8,选择“另存为”,在弹出的对话框中更改编码为UTF-8,然后保存文件。 5. **VBA宏处理**:对于复杂情况,可能需要编写VBA宏来处理编码问题。通过宏代码,可以遍历工作表中的每个单元格,将字符串...

    VBJSON.zip

    - 对于包含中文或其他非ASCII字符的数据,要确保在传输和存储过程中保持正确的编码,通常推荐使用UTF-8。 总的来说,VBJSON库是VB开发者处理JSON数据的强大工具,通过提供简洁的API和良好的中文字符支持,极大地...

    数据导出EXCEL 解决中文名乱码 同时赠由二进制转换成文件(解决中文名乱码)

    1. **设置Excel文件编码**:在导出数据时,确保Excel文件采用支持中文的编码格式,如UTF-8。大多数现代软件默认使用UTF-8,但如果你使用的是较旧版本的Excel,可能需要手动设置。 2. **导出前统一编码**:在导出前...

    VBA利用js繁简转换

    常见的编码格式有GB2312、GBK、BIG5、UTF-8等。在进行繁简转换时,需要了解这些编码之间的对应关系。 JavaScript,通常用于Web开发,但也能够处理字符串和字符编码。在JavaScript中,有一些库,如`iconv-lite`或`js...

    什么是BOM头,如何去掉BOM头.zip

    在UTF-8编码中,BOM头由三个字节组成(0xEF, 0xBB, 0xBF),它并不是必须的,但有时候会被添加到文件的开头来表明该文件是采用UTF-8编码。尽管BOM头对于某些程序来说是有用的,但它可能会引起一些问题,尤其是在处理...

    精彩编程与编程技巧-混合字符串的长度...

    UTF-8 使用1到4个字节编码每一个Unicode字符,而UTF-16 使用2个或4个字节。在VBA或VBScript中,通常使用UTF-16来表示Unicode。 通过上述分析,我们可以看出,对于处理包含多种字符集的字符串时,正确选择和应用合适...

    VB读取记事本无乱码txt

    `StreamReader`支持多种编码,包括Unicode(如UTF-8),这样我们就能处理各种编码的文本文件,避免乱码。 以下是一个简单的VB代码示例,展示了如何读取记事本文件内容并赋值给string变量: ```vb Imports System....

    VBA将excel数据表生成JSON文件

    首先,我们可以利用ADODB.Stream对象来创建一个UTF-8编码的文本文件,这是JSON文件的标准编码。以下是一个简单的示例: ```vba Sub ToJson() ' 创建UTF8文本文件 Dim myrange As Range Set myrange = Worksheets...

    便于各种语言之间切换 使用unicode编码

    UTF-8编码方式具有良好的向前兼容性和效率,它使用1到4个字节来表示一个Unicode字符,对于英文等使用较少字符集的语言,它只需要1字节,而对于像中文这样的复杂语言,可能需要3或4字节。这样做的目的是确保在任何...

Global site tag (gtag.js) - Google Analytics