说有一个电子表格或表在MS access,其中包含非英文字(音)如 à, á, â, ã, ä, å, æ, ç, è, é, ê, ë

由于这个系统是使用英语的人,最终用户、搜索时,价值观不能猜测是否某些词或名字都输入在英文版本或在原始版本。

就是 días 可能是最初输入到数据库为 díasdias. coñac 可能会被输入为 coñacconac.事实上有时候,数据输入这种方式,有时其他办法。

问题在于是否有一种方法来设定这种搜索选项,因此建的办公室搜索机制(Ctrl+f)会找到 díasdias 供给。

如果没有,我想听听你有什么方法来解决这个问题。

有帮助吗?

解决方案

GUI搜索对话的匹配的行为的办公应用程序不是定制的。但是,如果我是你,这里就是我怎么会解决问题:

首先,你会需要一些。净的代码,其执行的口音-不敏感的搜索。根据其语言你最喜欢的,这里既是一个VB和C#样品。核心是使用 CompareInfo.IndexOf 方法的使用CompareOptions参数设定为 CompareOptions.IgnoreNonSpace.这是一个口音-不敏感的搜索。

接下来,你会需要调用这个代码的办公应用程序。你怎么插头的代码,在不同的应用程序--例如,这里是博客显示出如何做到这一点从 Excel访问.

然后你会需要包装这些呼吁围绕代码和用户界面,模拟一个搜索和替换。这再一次将会是不同的,在每个应用程序。例如,在Excel中只循环,通过所有单元的当前工作表,并寻找匹配使用你的代码。

最后,你会想要的地图,一个工具栏或其他方式得到你的代码援引。

无论如何,希望这足够的信息来帮助你开始。这里的核心。净码在VB或C#做的口音-不敏感的匹配:

VB

Module Module1
    Sub Main()
        ' returns: 3
        Dim pos As Integer = FindIgnoreDiacritics("àcçëñt-énäblêd", "en")
    End Sub
    Function FindIgnoreDiacritics(ByVal lookIn As String, ByVal lookFor As String) As Integer
        FindIgnoreDiacritics = System.Globalization.CultureInfo.InvariantCulture.CompareInfo.IndexOf(lookIn, lookFor, System.Globalization.CompareOptions.IgnoreNonSpace Or System.Globalization.CompareOptions.IgnoreCase)
    End Function
End Module

C#

class Program
{
    static void Main(string[] args)
    {
        // returns: 3
        int pos = FindIgnoreDiacritics("àcçëñt-énäblêd", "en");
    }
    static int FindIgnoreDiacritics(string lookIn, string lookFor)
    {
        return System.Globalization.CultureInfo.InvariantCulture.CompareInfo.IndexOf(lookIn, lookFor,
            System.Globalization.CompareOptions.IgnoreNonSpace | System.Globalization.CompareOptions.IgnoreCase);
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top