C # - запрос нескольких параметров поиска с разделителями-запятыми со строковым разделителем - PullRequest
0 голосов
/ 25 февраля 2011

Требование: У меня есть приложение для Windows, написанное на C #, которое в настоящее время будет искать только файл .CSV по значению 1 Corp (например: Поиск по Corp: 160), и я хочу, чтобы он искал несколько значений Corpразделенные запятыми (например: Поиск по Corp: 160, 220, 310, 550, 610).

Проблема: Как найти несколько значений corp, разделенных запятыми ??(напр .: Поиск по Corp: 160, 220, 310, 550, 610).Строка должна быть разделена по значению запятой, а значение каждой строки должно быть установлено равным x + 1 # переменных (например: Corp1, Corp2, Corp3), когда есть x # запятых (например, Corp1, Corp2, Corp3имеет 2 запятых, поэтому необходимо определить 3 переменные), а затем выполнить цикл поиска x + 1 раз для каждого из значений corp

Вот соответствующий код в MainForm.cs коде, гдеопределено значение corp:

    private SearchCriteria GetSearchCriteria()
    {

        // Initialize Search Parameters object
        SearchCriteria sc = new SearchCriteria(textBoxCorp.Text,
                                               textBoxOrderNumber.Text,
                                               textBoxCampaign.Text,
                                               textBoxCity.Text,
                                               comboBoxState.Text,
                                               textBoxZip.Text,
                                               folderBrowserDialog1.SelectedPath,
                                               folderBrowserDialog2.SelectedPath,
                                               radioButtonAny.Checked,
                                               radioButtonAll.Checked);

        return sc;
    }

    private void textBoxCorp_TextChanged(object sender, EventArgs e) { }

Вот соответствующий код в SearchProcess.cs , куда вводится и проверяется значение corp, чтобы проверить, соответствует ли оно поиску:

    // Function runs in worker thread and emulates long process.
    public void Run()
    {
        m_sc = (SearchCriteria)m_form.Invoke(m_form.m_DelegateGetSearchCriteria);
        // Display parameters
        m_form.Invoke(m_form.m_DelegateAddString, new Object[] { "Search on Corp: " + m_sc.get_Corp() });
        m_form.Invoke(m_form.m_DelegateAddString, new Object[] { "Search on OrderNumber: " + m_sc.get_OrderNumber() });
        m_form.Invoke(m_form.m_DelegateAddString, new Object[] { "Search on Campaign: " + m_sc.get_Campaign() });
        m_form.Invoke(m_form.m_DelegateAddString, new Object[] { "Search on City: " + m_sc.get_City() });
        m_form.Invoke(m_form.m_DelegateAddString, new Object[] { "Search on State: " + m_sc.get_State() });
        m_form.Invoke(m_form.m_DelegateAddString, new Object[] { "Search on Zip: " + m_sc.get_Zip() });
        m_form.Invoke(m_form.m_DelegateAddString, new Object[] { "Search on Source Path: " + m_sc.get_SourcePath() });
        m_form.Invoke(m_form.m_DelegateAddString, new Object[] { "Search on Target Path: " + m_sc.get_TargetPath() });
        if (m_sc.get_SearchAND()==true)
        {
            m_form.Invoke(m_form.m_DelegateAddString, new Object[] { "Search for All" });
        }
        else
        {
            m_form.Invoke(m_form.m_DelegateAddString, new Object[] { "Search for Any" });
        }

            // Found should be true if ANY of the criteria are met. 
            // This is an OR logic gate
            // If any of the given fields do match then it is a true
            if (m_sc.get_SearchOR().Equals(true))
            {
                // Check for the Corp type match
                if (m_sc.get_Corp() != "" && String.Compare(AgentID, m_sc.get_Corp()) == 0)
                {
                    found = true;
                }
        }

            // Copy the file if ANY of the search criteria have been met
            if (found)
            {

                m_form.Invoke(m_form.m_DelegateAddString, new Object[] {"FOUND: Order_No: " + Order_No +
                                                                        " barcode: " + barcode +
                                                                        " MailerCode: " + MailerCode +
                                                                        " AgentID: " + AgentID +
                                                                        " City: " + City +
                                                                        " State: " + State +
                                                                        " ZIP: " + ZIP});
                //passes values to TransferFile 
                TransferFile(directory, barcode, AgentID, ZIP);
            }
        } // end for that finds each matching record 

Любая помощь будет принята с благодарностью!Спасибо!!!

1 Ответ

1 голос
/ 25 февраля 2011

Не совсем уверен, что вы делаете, где находится источник данных, по которому вы производите поиск, поэтому просто угадайте:

string sCorpFilter = m_sc.get_Corp();
IEnumerable<string> corps = null;

if (! string.IsNullOrEmpty(sCorpFilter))
{
  corps = sCorpFilter.Split(",".ToCharArray(),
   StringSplitOptions.RemoveEmptyEntries).Select(s => s.Trim());
}
[...]
if (corps != null && corps.Contains(AgentID))
{
  found = true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...