datagridview позиция слов

257
16 ноября 2021, 21:20

Подскажите, пожалуйста, как вывести каждую позицию слова в отдельному столбце грида? Вывожу позиции так:

 string value = dataGridView8.CurrentRow.Cells[1].Value.ToString();
        string str = richTextBox2.Text;
        int length = str.Length;
 while (true)
        {
            int i = str.IndexOf(value);
            if (i == -1) break;
            dataGridView9.Rows.Add(i.ToString());
            str = str.Substring(i + value.Length);
        }

Результат следующий: Нужно,например, чтобы "9" было в "N1", а "781" уже в "N2", "119" в "N1", "360" в "N2", а в "delta" -> "N2-N1". Подскажите, пожалуйста.

Answer 1

string value = dataGridView8.CurrentRow.Cells[1].Value.ToString().ToLower(); 
string str = richTextBox2.Text.ToLower(); 
int length = str.Length; 
int N1 = 0, N2 = 0, delta = 0, k = 0, i = 0; 
 
// Символьный массив delims должен включать все знаки пунктуации, используемые в тексте 
char[] delims = {',', '.', ':', ';', '?', '!', '(', ')', '[', ']', 
                 '<', '>', '{', '}', '\'', '\"', '\\', '\n', '\r', '\t'}; 
 
// Очистка текста от знаков пунктуации (замена их на пробелы) 
for (int j = 0; j <= delims.Length - 1; j++) { 
  str = str.Replace(delims[j], ' '); 
} 
 
while (true) { 
  if (str.Length == length) {  
    i = str.IndexOf(value + " "); // начало текста может не содержать лидирующего пробела 
    if (i == -1) break; 
  } 
  else { 
    i = str.IndexOf(" " + value + " "); // далее текст разделен на слова пробелами 
    if (i == -1) break; 
    else i++;            // уточняем позицию найденного слова 
  } 
 
  k++; 
  if (k % 2 == 1) {  // k - нечётное 
    N1 = i + length - str.Length;                   
  } 
  else {  // k - чётное 
    N2 = i + length - str.Length; 
    if (N2 > N1) { 
      delta = N2 - N1; 
      dataGridView9.Rows.Add(value, N1.ToString(), N2.ToString(), delta.ToString()); 
    } 
  } 
  str = str.Substring(i + value.Length); // усечение строки с "головы" 
} 
 
if (k % 2 == 1 && N1 > N2) {  // в случае, когда для N1 нет парного N2, используем N2 
  delta = N1 - N2;            // из предыдущей пары с учётом порядка следования в тексте 
  dataGridView9.Rows.Add(value, N2.ToString(), N1.ToString(), delta.ToString()); 
}

Для надёжного выделения слов в тексте очистим его от знаков пунктуации, заменив их пробелами. Поиск слова будем выполнять, дополнив образец пробелами слева и справа. Тогда получим следующий улучшенный вариант. Указанную вами проблему он решает. Но в тексте могут встретиться и другие особые случаи. Например, изменяемые формы слов: существительные склоняются, глаголы спрягаются и т.д. Так что, совершенствованию предела нет.:)

READ ALSO
Почему не происходит запись в локальную базу данных?

Почему не происходит запись в локальную базу данных?

У меня есть программа, которая парсит данные с сайта и сохраняет их по одному экземпляру в файлы f1json , f2

215
Получить GameObject, если он не активен

Получить GameObject, если он не активен

Всем приветУ меня есть на одной линии машина и три триггера, идущих друг за другом

190
Не получается записать текст в файл С#

Не получается записать текст в файл С#

Не записывает текст в файл=( Подскажите, пожалуйста, что не так?

138
Вид ячеек DataGridView C#

Вид ячеек DataGridView C#

Есть код:

121