删除MS Access中包含特定字符的单词/字符串

时间:2015-02-27 21:44:49

标签: ms-access access-vba

我正在编写查询以将通过供应商创建的文字处理器输入的文本提取到Oracle数据库,我需要将其导出到Word或Excel。文本被输入备忘录字段,文本与文字处理器用于不同功能的代码交织(粗体,缩进,硬返回,字体大小等)。

我已经使用了替换功能来解析许多更常见的代码,但是有很多变化,几乎不可能完全捕获它们。有没有办法做到这一点?不幸的是,我仅限于使用Microsoft Access 2010来尝试实现这一目标。

我发现的共同点是所有代码都以反斜杠开头,我希望能够删除以反斜杠开头的所有字符串,直到下一个空格为止所有代码都从最终文本中删除。

以下是与我合作的文字的简短示例:

  {\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Times New Roman;

    \viewkind4\uc1\pard\f0\fs36 An abbreviated survey was conducted
    on 02/02/15 to investigate complaint #OK000227. \par  
    No deficiencies were cited.\par

    \fs20\par
}}

2 个答案:

答案 0 :(得分:1)

如果您的计算机安装了Microsoft Word,那么您已经拥有了一个RTF解析器,因此您不必自己动手#34;。您可以让Word打开RTF文档并将其保存为纯文本,如下所示:

Option Compare Database
Option Explicit

Public Function RtfToPlainText(rtfText As Variant) As Variant
    Dim rtn As Variant
    Dim tempFolder As String, rtfPath As String, txtPath As String
    Dim fso As Object  ' FileSystemObject
    Dim f As Object  ' TextStream
    Dim wordApp As Object  ' Word.Application
    Dim wordDoc As Object  ' Word.Document
    Dim tempFileName As String
    tempFileName = "~RtfToPlainText"

    If IsNull(rtfText) Then
        rtn = Null
    Else
        ' save RTF text as file
        Set fso = CreateObject("Scripting.FileSystemObject")
        tempFolder = fso.GetSpecialFolder(2)  ' Temporaryfolder
        rtfPath = tempFolder & "\" & tempFileName & ".rtf"
        Set f = fso.CreateTextFile(rtfPath)
        f.Write rtfText
        f.Close
        Set f = Nothing

        ' open in Word and save as plain text
        Set wordApp = CreateObject("Word.Application")
        Set wordDoc = wordApp.Documents.Open(rtfPath)
        txtPath = tempFolder & "\" & tempFileName & ".txt"
        wordDoc.SaveAs2 txtPath, 2  ' wdFormatText
        wordDoc.Close False
        Set wordDoc = Nothing
        wordApp.Quit False
        Set wordApp = Nothing
        fso.DeleteFile rtfPath

        ' retrieve plain text
        Set f = fso.OpenTextFile(txtPath)
        rtn = f.ReadAll
        f.Close
        Set f = Nothing
        fso.DeleteFile txtPath
        Set fso = Nothing
    End If
    RtfToPlainText = rtn
End Function

然后,如果你有一个包含两个备注字段的表 - [rtfText]和[plainText] - 你可以使用Access中的以下查询将纯文本提取到第二个备注字段中:

UPDATE rtfTestTable SET plainText = RtfToPlainText([rtfText]);

答案 1 :(得分:0)

您正在使用的文字是RTF。 Here is a tutorial关于文件格式。

This link(在另一个网站上,需要注册)可能会给你副本&粘贴您可以用来将rtf字段转换为txt的代码。

您可以从数据库中复制字段的值并将其粘贴到记事本中,然后将记事本文件保存为“test.rtf”...然后您可以双击文件图标并打开文档。

RTF是一种旧的MS文件格式,允许格式化文本。见this wikipedia page.