У меня есть плагин Outlook, который я написал на C #, он сканирует электронные письма и перетасовывает их в разные папки. Поскольку термины, которые мы ищем, меняются достаточно часто, добавление их в качестве переменных в программу было бы совершенно неприемлемым; к тому же списки довольно длинные! Я сделал так, чтобы код собирал строки из CSV и использовал этот термин в запросе DASL.

Моя проблема в том, что когда нам нужно искать такие слова, как «не делаю», «не имею», «не буду», «Дейва» и другие сокращения или притяжательные существительные вызывают проблемы. Я перепробовал все, что мог, чтобы решить эту проблему, но, к сожалению, в недоумении. Программа работает безупречно, если не введено сокращение. Пожалуйста помоги :)

Самый важный фрагмент кода:

         using (StreamReader r = new StreamReader(fileLoc))
        {
            //while != null to kill the loop
            string line;
            string prefix = @"@SQL=urn:schemas:httpmail:textdescription like '"; 
            string postfix = @"'";
            while ((line = r.ReadLine()) != null)
            {
                //slurp the csv line out, and spit it into DASL query.
                line = prefix + line + postfix;
                lines.Add(line);

            }
        } //closes out the streamreader object?
        string[] outputArray = lines.ToArray();
        return outputArray;

Мой CSV-файл выглядит примерно так:

%i do not%
%i flipped it%
%no thanks%

Когда я пытаюсь добавить что-то вроде% не делай этого% или% не буду%, у меня возникают проблемы.

Я пробовал такие вещи, как% don''t%,% "don't"%,% don / 't%,% dochr (39) t%, к сожалению, все безуспешно.

Как сделать так, чтобы запрос DASL принимал апостроф? И как мне заставить его принять этот апостроф, если он существует в записи в файле CSV?

Благодарность :)

Изменить. Это модуль, который я использую для поиска писем с запросом DASL, если он может помочь кому-то решить проблему.

  public void SearchEmailBodyWithArray(string[] filter)
        {
            //this is the workhorse of this program
            MessageBox.Show("Pick Source Folder");
            Outlook.MAPIFolder olFolder = Application.Session.PickFolder();
            MessageBox.Show("Pick Destination Folder");
            Outlook.MAPIFolder destFolder = Application.Session.PickFolder();
            Outlook.Items items = olFolder.Items;
            Outlook.MailItem mailItem = null;

            object folderItem;
            string subjectName = string.Empty;

            int f = 0;
            while ( f < filter.Length)
            {
                folderItem = items.Find(filter[f]);
                while (folderItem != null)
                {
                    mailItem = folderItem as Outlook.MailItem;
                    if (mailItem != null)
                    {
                        subjectName += "\n" + mailItem.Subject;
                        mailItem.Move(destFolder);


                    }
                    folderItem = items.FindNext();
                }
                f++;
            }
            subjectName = " The following e-mail messages were found: " +
                subjectName;
            MessageBox.Show(subjectName);

        }
0
Dave Babler 8 Июн 2018 в 19:15

1 ответ

Лучший ответ

У меня есть схема DASL, которая обрабатывает апострофы. Мой фрагмент кода - VBA, но запрос, вероятно, тот же, потому что мы используем те же имена схемы свойств пространства имен, что и объект Property-Acessor - согласно Sue Mosher @ MS Outlook 2007 Programming: JumpStart for Admin и PwrUsers, pg 503.

Set myRestrictItems = myFolderContatos.Items.Restrict( _
                           "@SQL=" & Chr(34) & "http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/udfToAdd" & Chr(34) & " = 1 AND " _
                        & Chr(34) & "urn:schemas:contacts:bday" & Chr(34) & " = '" & "06 de abril de 1930" & "' AND " _
                        & Chr(34) & "urn:schemas:contacts:cn" & Chr(34) & " = " & ParseSpecialCharsAndDataTypeForSQL("Sérgio D'Or", False, False))

Когда я делаю Debug.print ParseSpecialCharsAndDataTypeForSQL:

?ParseSpecialCharsAndDataTypeForSQL("Sérgio D'Or",False,False)
'Sérgio D''Or'

И находит Контакт:

?myRestrictItems.Count
1

Резюмируя, можно сказать, что старый прием Jet Access, позволяющий избежать апострофа, - это верный путь.

Надеюсь, это поможет.

P.S. Я знаю, что с момента вашего вопроса прошло много месяцев, но, тем не менее, может быть, кому-то помочь.

0
Marcelo Scofano Diniz 22 Янв 2019 в 20:09