Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
524 / 400 / 213
Регистрация: 28.07.2011
Сообщений: 2,221
.NET Core

Однозначно сопоставить строки

22.10.2022, 11:44. Показов 1468. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.
Есть 2 списка строк.
я вручную выбираю строку из 1 списка и мне должна подобраться верная строка из списка 2.
например
в 1 списке
Вх. док. эл. обмена "1Э-ДФЛ" от ООО "Компания"
из 2 списка должно подобраться такое
Договор №1/Э-ДФЛ от 25.05.2005 с ООО "Компания"

соотвественно списка отличаются номерами, датами, названиями организаций.
Выслушаю ваши варианты.
П.ц. вроде просятся регулярки но я их не валамон
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.10.2022, 11:44
Ответы с готовыми решениями:

Вытянуть из строки номер и сопоставить его с другим полем
Добрых времени суток. Задача такова: сопоставить квартиру и имя сотрудника, ответственного за нее. Есть таблица с именем сотрудника и...

Однозначно отсортировать словарь
Сортирую словарь: по значению: f_dict = sorted(f_dict.items(), key=lambda x: x, reverse=True) но порядок строк с однаковой...

знак который однозначно....
Знак который однозначно показывает определенный концепт, это... 1)Синоним 2)Омоним 3)Термин 4)Формула 5)Форма

28
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
31.10.2022, 15:13
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Uswer Посмотреть сообщение
вот что я накидал
Ну, вы пошли по шаблону ОБЯЗАТЕЛЬНОГО наличия Э-ДФЛ.
А с ТС тема остановилась на том, что этот шаблон не во всех строках.
Общего правила соответствия он сам не смог сформулировать.
И не дал достаточного образца данных, чтобы это могли сделать другие.
0
2298 / 1614 / 400
Регистрация: 26.06.2017
Сообщений: 4,780
Записей в блоге: 1
01.11.2022, 08:38
Цитата Сообщение от Элд Хасп Посмотреть сообщение
И не дал достаточного образца данных, чтобы это могли сделать другие.
Это бесспорно.
Цитата Сообщение от Элд Хасп Посмотреть сообщение
вы пошли по шаблону ОБЯЗАТЕЛЬНОГО наличия Э-ДФЛ
Не совсем так. У меня в коде самый примитивный поиск по сопоставлению. Там ищется каждое (любое) слово в текущей строке входного массива строк. Если слово находится полностью, т.е. точно совпадает со словом в текущей анализируемой строке, то ему присваивается больший вес. Если находится лишь вхождение слова в текст текущей анализируемой строки, то ему присваивается меньший вес. И так для всех слов. В результате вычисляется некий коэффициент "попадания" в контекст предложения (строки). Я хотел ещё добавить чтобы на этот коэффициент влияла последовательность совпадения слов, но так как данных для анализа мало, то и придумывать нечего, а "пилить" поиск аля "Яндекс" мне слабо.
1
524 / 400 / 213
Регистрация: 28.07.2011
Сообщений: 2,221
16.11.2022, 11:06  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
А с ТС тема остановилась на том, что этот шаблон не во всех строках.
тут ребята предложили ввести таблицу масок, чтобы по нему как-то идентифицировать.
как мне его сделать?
например
Вх. док. эл. обмена "[тут любое число] Э-ДФЛ" от [компания] значит это ДФЛ
Вх. док. эл. обмена "[тут любое число] Э-ДФЛ от [тут любая дата] " от [компания] значит это ДФЛ

с помощью регулярок что ли? их же тогда надо как-то правильно писать
или есть типа * - любой символ, d - цифра итд?
и если вдруг они будут приходить в другом виде мы можем создать другую маску например
Вх. док. эл. обмена "[туткакоеточисло]_ДЛ_от_[Компания] от [тут любая дата]" -> ДФЛ

и раз это ДФЛ то мы уже ищем [это самое число]/Э-ДФЛ в другом списке

и также для других типов
Вх. док. эл. обмена "СОР_[тут любое число]_[тут любой текст] к ДЛ от [тут любая дата]" -> СОР
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
16.11.2022, 12:09
Цитата Сообщение от Fakeoke Посмотреть сообщение
тут ребята предложили ввести таблицу масок, чтобы по нему как-то идентифицировать.
Можно.
Но создавать свой язык масок бессмысленно.
Лучше тогда использовать регулярки.

Я не могу точно вам ответить, поскольку не знаю насколько сильно различаются ваши шаблоны.
Как минимум мне для собственных выводов нужно увидеть достаточные оба списки. Чтобы в них были данные разных шаблонов и указана связь между элементами списков.
0
524 / 400 / 213
Регистрация: 28.07.2011
Сообщений: 2,221
16.11.2022, 14:08  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Я не могу точно вам ответить, поскольку не знаю насколько сильно различаются ваши шаблоны.
Как минимум мне для собственных выводов нужно увидеть достаточные оба списки. Чтобы в них были данные разных шаблонов и указана связь между элементами списков.
вот это все должно быть отнесено к типу ДФЛ и сопоставлено с договором с номером [выделенное число]/Э-ДФЛ с такой то компанией и с такой то датой если она есть.
п.ц. поля число дата и компания во втором списке уже разделены можно их не разделять а сравнивать напрямую.

Code
1
2
3
4
5
6
7
8
1. Вх. док. эл. обмена "999Э-ДФЛ" от Компания1
2. Вх. док. эл. обмена "10-Э-ДФЛ_22.05.2000" от ООО "Компания2"
3. Вх. док. эл. обмена "777Э-ДФЛ (1)" от ООО "Компания3"
4. Вх. док. эл. обмена "ДФЛ АА Компания_01.02.2020" от ООО "А.А. Компания"
5. Вх. док. эл. обмена "ДФЛ_33Э_11.01.2001" от ООО "Компания4"
6. Вх. док. эл. обмена "2228К_16-ДЛ" от ООО "Компания5"
7. Вх. док. эл. обмена "Договор лизинга 9999-К-2-ДЛ_15.04.2021" от ООО "Компания6"
8. Вх. док. эл. обмена "ДЛ 206_К_2-ДЛ_120216" от ООО "Компания7"
ну и соответвенно во втором списке этому должны найтись.
Code
1
2
3
4
5
6
7
8
1. Договор №999/Э-ДФЛ с ООО "Компания1"
2. Договор №10/Э-ДФЛ с ООО "Компания2"
3. Договор №777/Э-ДФЛ от 22.05.2000 с ООО "Компания3"
4. Договор №[какойтономер]/Э-ДФЛ от 01.02.2020 с ООО "А.А. Компания"
5. Договор №33/Э-ДФЛ с ООО "Компания4" 
6. Договор №2228/Э-ДФЛ с ООО "Компания5"
7. Договор №9999/Э-ДФЛ от 15.04.2021 с ООО "Компания6"
8. Договор №206/Э-ДФЛ от 12.02.2016 с ООО "Компания7"
при чем не факт что в названии будет дата

в первом списке имена и формат может меняться, поэтому и нужна какая-то табличка сопоставления чтобы можно было в нее добавить новый формат имени и однозначно понять что это именно ДФЛ и попробовать найти ему пару во втором списке.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
16.11.2022, 17:31
Цитата Сообщение от Fakeoke Посмотреть сообщение
в первом списке имена и формат может меняться, поэтому и нужна какая-то табличка сопоставления чтобы можно было в нее добавить новый формат
Теперь вижу списку и согласен с вами.
Нужны шаблоны для регулярки, насколько понимаю в этом.
Но к сожалению я с регулярками плохо знаком.

Может кто-то другой ответит.
0
2298 / 1614 / 400
Регистрация: 26.06.2017
Сообщений: 4,780
Записей в блоге: 1
17.11.2022, 16:37
Не знаю насколько Вам покажется приемлемым, но предложу вариант, который вполне реализуем. Итак, из данных видно, что анализ входных строк можно начинать после первой кавычки. Далее строка содержит некий шифр документа, не обязательную дату и название организации. Исходя из этого создадим класс:
C#
1
2
3
4
5
6
class ExchangeElement
{
  public string Code {get;set;}
  public DateTime Date {get;set;}
  public string CompanyName  {get;set;}
}
Разбиение строки на фрагменты делаем по {' ', '_'}. Также из строки есть смысл удалить некоторые слова не интересующие нас для анализа, например "от". После чего в каждом фрагменте ищем каждое целевое свойство, если ранее оно не было заполнено. При этом в каждом фрагменте удаляем символ '-'. Например, при первом проходе у нас все свойства пусты, тогда для текущего фрагмента будем вызывать методы поиска шифра, даты и компании. Не сложно догадаться, что шифр начинается с цифры и далее все символы до конца фрагмента. Определение даты пробуем через TryParse фрагмента, а вот с компаниями чуть интереснее, т.к. могут быть одноимённые, но с разной формой собственности. Если какой либо вызов метода поиска дал положительный результат, то из коллекции фрагментов тот фрагмент, в котором произошло обнаружение, исключаем. Повторяем вызовы методов поиска для коллекции фрагментов, но уже избегая вызова поиска того свойства, которое заполнено. По нашему примеру для строки №1 первым найдётся шифр, поэтому далее будем искать только дату и компанию. Поиск даты не даст результата, а поиск компании даст. Если нечто подобное будете реализовывать, то продолжу умозаключения, а пока откланиваюсь.

P.S. Я тоже с регулярками не дружу.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
17.11.2022, 17:46
Fakeoke, если правильно понял (чуть изменённый алгоритм от Uswer).
В строке из первого списка:
1) ищем с конца " от ";
2) то что после - это название компании;
3) выделяем первую подстроку ограниченную кавычками;
4) выделяем в ней первую цифровую последовательность - это код;
5) если в подстроке есть дата - то получаем её.

По полученным коду, дате и имени компании:
1) Выбираем подстроку между "№" и "/Э-ДФЛ" - проверяем на код, если он есть;
2) Выбираем подстроку после " от " и получаем из неё дату - проверяем её, если она есть;
3) Проверяем конец строки на название компании.

Если алгоритм правильный и подходит для всех шаблонов, то можно его реализовать логическим кодом без регулярки.
Это будет быстрее и не потребует доводки в период эксплуатации приложения.

Добавлено через 7 минут
Fakeoke, даты всегда в таком формате (dd.mm.yyyy)?
0
524 / 400 / 213
Регистрация: 28.07.2011
Сообщений: 2,221
18.11.2022, 12:22  [ТС]
мне нужны именоо регулярки которые подходят под каждый из типов моих предложенных.
там помимо этих 8 видов относящихся к ДФЛ есть остальная куча которая должна относится к другому виду.
то есть мне надо алгоритм не только к этим 8 строчкам. поэтому и нужны регулярки чтобы я создал массив регулярок типа
1 татата - дфл - выделило номер - нашла дфл с таким номером
2 татата - дфл
3 татататата - сор - выделило номер - нашла сор с таким номером
итд итп
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.11.2022, 12:22

Является ли схема однозначно декодируемой?
Добрый день. Изучаю дискретную математику и натолкнулся на вопрос: как определить, является ли схема однозначно декодируемой? ...

как однозначно узнать PR страницы
тулбар постоянно показывает разные цыфры, то 0 то 3 (без www) или 0 или 2 (с www). как можно выяснить на самом деле какой PR? в общем это...

Hello World не все так однозначно :D
Допустим, нам нужно написать программу, которая будет выводить в консоль фразу "Hello World!" public class HelloWorld { ...

Однозначно определить IntPtr 4хбайтовым
Всем привет. Как точно указать размер IntPtr? Т.е. есть структура, которую считываю из файла, и размер ее должен быть постоянный. При смене...

Точно и однозначно сформулировать условие задачи
Точно и однозначно сформулировать условие задачи, решение которой приведено ниже. Program Kr_N_4; Var A : Array Of Integer; I, J, N, M:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru