Сразу к делу. У нас есть таблица с серийными номерами (абстрактная таблица, конкретную нет смысла прикладывать). Серийные номера вводятся вручную, поэтому появляются следующие дубли: - CR6623OJ4 и CR6623DJ4 (человек путает O и D) - PLN4558K и PLN455BK (человек путает 8 и "B") - 23774301 и 237743O1 (человек путает цифру ноль и букву О)
Подскажите, как найти такие дубли? Я думал создать еще один столбец, заменить в серийниках 8 на B и сравнивать эти два столбца. Но таблица может быть на 50 тысяч строк, поэтому может есть способ проще?
Сразу к делу. У нас есть таблица с серийными номерами (абстрактная таблица, конкретную нет смысла прикладывать). Серийные номера вводятся вручную, поэтому появляются следующие дубли: - CR6623OJ4 и CR6623DJ4 (человек путает O и D) - PLN4558K и PLN455BK (человек путает 8 и "B") - 23774301 и 237743O1 (человек путает цифру ноль и букву О)
Подскажите, как найти такие дубли? Я думал создать еще один столбец, заменить в серийниках 8 на B и сравнивать эти два столбца. Но таблица может быть на 50 тысяч строк, поэтому может есть способ проще?
ну например заменить O,0,8,B,D на @, а потом искать дубли - можно формулами, можно PQ - абстрактная идея, конкретику нет смысла прикладывать
ну например заменить O,0,8,B,D на @, а потом искать дубли - можно формулами, можно PQ - абстрактная идея, конкретику нет смысла прикладыватьпрохожий2019
let lst = {"0","O","D","8","B"}, rep = List.Buffer(List.Transform(lst,(x)=>{x,"@"})), f = (x)=> Text.Combine(List.ReplaceMatchingItems(Text.ToList(x),rep)),
from = Excel.CurrentWorkbook(){[Name="Таблиц"]}[Content], typ = Table.TransformColumnTypes(from,{"Серийный номер", type text}), add = Table.AddColumn(typ,"mask",(x)=>f(x[Серийный номер])), to = Table.Group(add, {"Производитель", "mask"}, {"lst", each Text.Combine(List.Distinct([Серийный номер]),", ") })
in to
[/vba]если есть проблема кириллица/латиница - можно запихнуть сюда же а вот что с этим делать дальше - не понятно, конечного ожидаемого результата в файле не нашёл
[vba]
Код
let lst = {"0","O","D","8","B"}, rep = List.Buffer(List.Transform(lst,(x)=>{x,"@"})), f = (x)=> Text.Combine(List.ReplaceMatchingItems(Text.ToList(x),rep)),
from = Excel.CurrentWorkbook(){[Name="Таблиц"]}[Content], typ = Table.TransformColumnTypes(from,{"Серийный номер", type text}), add = Table.AddColumn(typ,"mask",(x)=>f(x[Серийный номер])), to = Table.Group(add, {"Производитель", "mask"}, {"lst", each Text.Combine(List.Distinct([Серийный номер]),", ") })
in to
[/vba]если есть проблема кириллица/латиница - можно запихнуть сюда же а вот что с этим делать дальше - не понятно, конечного ожидаемого результата в файле не нашёлпрохожий2019
basementphys, если в серийниках возможно использование букв, то требуется правило чтобы определить следует ли переводить букву в цифру ли нет? Например, надо иметь или таблицу символов, которые не могут встречаться в серийниках или шаблон полей серийника, по которому можно узнать позиции в которых могут быть только буквы и позиции в которых могут быть только цифры. Если, например, в серийнике может быть буква D то как узнать наличие D это ошибка ввода или такой номер?
basementphys, если в серийниках возможно использование букв, то требуется правило чтобы определить следует ли переводить букву в цифру ли нет? Например, надо иметь или таблицу символов, которые не могут встречаться в серийниках или шаблон полей серийника, по которому можно узнать позиции в которых могут быть только буквы и позиции в которых могут быть только цифры. Если, например, в серийнике может быть буква D то как узнать наличие D это ошибка ввода или такой номер?scriptapplications
Сообщение отредактировал scriptapplications - Понедельник, 06.06.2022, 14:19