Страницы: 1 2 След.
RSS
Как отрезать яйца?
 
Вопрос в файле.
 
Только руками:) или через таблицу подстановки. Хотя могу ошибаться:)))
 
{quote}{login=Igor67}{date=20.01.2010 09:52}{thema=}{post}...или через таблицу подстановки.{/post}{/quote}  
 
Просвятите как?  
12 файлов по 65 тысяч строк корявых данных...  
Я сдохну их вручную делать:(((
 
Строки 1-4 отделяются без проблем.  
Ну, допустим, в строках 5 и 6 тоже можно отрезать.  
Но тореадор в чем провинился?! :)
 
Яйца отрезать тому, кто такие данные забивал.
 
{quote}{login=vikttur}{date=20.01.2010 09:57}{thema=}{post}...Но тореадор в чем провинился?! :){/post}{/quote}  
Видимо судьба такой :-)  
 
vikttur, выручайте! Есть мысли?  
Структуру таблицы полностью передал...
 
А "куриное" обязательно должно стать "курица"? Или достаточно отделить?
 
{quote}{login=Юрий М}{date=20.01.2010 10:00}{thema=}{post}Яйца отрезать тому, кто такие данные забивал.{/post}{/quote}  
 
Юрий, это мои первые мысли были...  
Я правда ещё хотел ему ... в ... запихать и ... в ... то же, не говоря уж о ..., но потом выяснилось, что файлы вели несколько человек, по нескольку лет и каждый писал как ему удобно...
 
{quote}{login=Юрий М}{date=20.01.2010 10:02}{thema=}{post}А "куриное" обязательно должно стать "курица"? Или достаточно отделить?{/post}{/quote}  
 
Если просто отделить, то курица, куриное, курячее - будут разное, а надо чтоб признак один был...
 
"vikttur, выручайте! Есть мысли?" - по поводу тореадора? Уже выразил :)  
 
По задаче - КОДСИМВ букв начинается со 192. Дерзайте :)
 
Дерзайте...  
Да если б я знал...
 
Сергей!  
а какие данные в реальном файле?  
обозначения столбцов и прочее  
посмотреть бы  
может можно найти какую-нибудь систему в идиотизме
 
{quote}{login=тухачевский}{date=20.01.2010 10:13}{thema=}{post}Сергей!  
а какие данные в реальном файле?  
обозначения столбцов и прочее  
посмотреть бы  
может можно найти какую-нибудь систему в идиотизме{/post}{/quote}  
 
Не, нельзя...  
Я уже пробовал :(  
Файлы выкладывать я не буду, не зачем это, весь идиотизм я уже передал...  
В столбце В идут наименования и разделяются любым знаком (.,"№ _и т.д.), одно слово всегда есть (его надо убрать),другое надо привести к общему виду, потому что "Подшипник Р18В2345ХЛ234" это то же что и "Подшипник,Р18В2345ХЛ234"...
 
ну полностью автоматом не полчится канещ) сначала через подставить вся модификации яиц обрезать. потом через сортировку группировать-фильтровать-удалять запятые тире и точки.
 
а вообще сейчас самое время -берите на практику студента - пусть ковыряет. как раз на месяц дел ))
 
{quote}{login=Dophin}{date=20.01.2010 10:44}{thema=}{post}...как раз на месяц дел )){/post}{/quote}  
Боюсь что больше :(
 
Сердж, глянь почту.  
Если там это хотя бы в принципе возможно, пусть с акцентом :), сделать - может смогу помочь. Или в избушку можно принести.
 
Поскольку без ручной работы все равно не обойтись, я бы попробовал реализовать такой алгоритм.    
Сначала удуляем лишнее, для чего в форму вводим слово, макрос ищет его построчно, и , если находит - перемещает эту строчку на другой лист, но уже без этого слова. Так до тех пор, пока не удалим все лишнее.    
Затем, примерно таким же образом, отделяем на разные листы, кур от гусей, страусов, быков и торреадоров.    
Потом разделяем ключевое слово (подшипник) от дополнительной инфы (№***), приводим все к одному виду, удаляем дубликаты.    
Ручной работы все равно останется много, но основную рутину выполнит макрос, под вашим чутким руководством.  
 
К сожалению, я такой макрос создать не смогу.
 
{quote}{login=Михаил}{date=20.01.2010 10:57}{thema=}{post}...К сожалению, я такой макрос создать не смогу.{/post}{/quote}  
Может кто-нибудь может? ;-)
 
Серж, а на какую помощь Вы расчитываете? Я имею ввиду - на какую часть обработки?
 
Я бегло почитал этот пост. Может не полностью вник в тему. Но думаю, тут можно попробовать парсить слова. Попробуйте через VBA обратиться к объекту PartOfSpeechList (MS Word).  
 
http://msdn.microsoft.com/en-us/library/aa209839(office.10).aspx
At odd moments: VBA, VB6, VB.NET, Java, Java for Android, Java Script, Action Script, Windows Scriping Host
 
"...а надо чтоб признак один был…"  
Excel непривередлив и ошибки в написании слов его иногда мало волнуют. Поэтому, если признак сделаем не целым словом, а его частью, то XL не обидится :)  
=ЕСЛИ(НАЙТИ("яйц";A1)=1;ПСТР(A1;6;4);ПСТР(A1;1;4))  
Подходит, если "структуру таблицы полностью передал..."
 
Виктор, это не решит проблему. Я ведь спрашивал у Сергея - достаточно ли просто удалить искомое. Я так понял, что нужно ещё и трансформировать то, что останется.
 
Я могу сделать такой макрос, но не бесплатно.  
 
В любом случае, сначала надо увидеть файл с исходными данными, и примером обработки 10-15 строк.  
 
Не утверждаю, что макрос обработает 100% данных, но с 98% точно справится.
 
Sub Макрос1()  
' Меняем все символы разделители на строку которой нет в файле "###"  
   Cells.Replace What:=" ", Replacement:="###", LookAt:=xlPart, SearchOrder _  
       :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False  
   Cells.Replace What:=",", Replacement:="###", LookAt:=xlPart, SearchOrder _  
       :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False  
   Cells.Replace What:="_", Replacement:="###", LookAt:=xlPart, SearchOrder _  
       :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False  
   Cells.Replace What:=".", Replacement:="###", LookAt:=xlPart, SearchOrder _  
       :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False  
   Cells.Replace What:="""", Replacement:="###", LookAt:=xlPart, _  
       SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _  
       ReplaceFormat:=False  
   Cells.Replace What:="¹", Replacement:="###", LookAt:=xlPart, SearchOrder _  
' Заменяем яйца паразиты    
       :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False  
   Cells.Replace What:="яйцо", Replacement:="", LookAt:=xlPart, SearchOrder _  
       :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False  
   Cells.Replace What:="яйца", Replacement:="", LookAt:=xlPart, SearchOrder _  
       :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False  
' Убираем нашу строку "###"  
   Cells.Replace What:="###", Replacement:="", LookAt:=xlPart, SearchOrder _  
       :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False  
End Sub  
 
Попробуйте так.
 
Узнаю справочник номенклатуры из 1С (каждый бухгалтер как хочет так и называет).  
 
Есть еще один алгоритм:    
Нахождение похожих наименований:  
 
1) Все символы кроме букв и цифр заменяются на "###". Парные разделители "######" заменяются на "###".  
2) Все слова переводятся в верхний регистр  
3) Строка разбиватеся на массив по разделителю "###"  
4) Массив сортируется по возрастанию.  
5) Если есть цифры перносятся в конец массива.  
6) Собирается строка из элементов массива  
7) Так делается для всех строк.  
8) Весь список строк сортируется.  
9) Каждая строка сравнивается по вхождению подстроки с другой строкой.  
10) Вычисляется коэффициент подобия строк ( (Количество совпадений)* (Количество элементов) * Длину подстроки.  
11) Строки сортируются по этому коэффициенту и по алфавиту.  
12) Анализ и далее повторить, если нужно еще использовать (Поиск и замена).  
 
200 тыс.строк за день удалось сделать ("яблочный пирог" и "пирожки с яблоками" удалось идентифицировать).
 
{quote}{login=Юрий М}{date=21.01.2010 01:12}{thema=}{post}Виктор, это не решит проблему. Я ведь спрашивал у Сергея - достаточно ли просто удалить искомое. Я так понял, что нужно ещё и трансформировать то, что останется.{/post}{/quote}  
Трансформировать вторым этапом - создать словарь (таблицу) подстановок.  
Или не вторым - сразу в формуле нарисовать поиск по таблице.  
Формулу причесать можно :)  
=ПСТР(A2;(НАЙТИ("яйц";A2)=1)*5+1;4)  
В примере разделитель находится всегда на той же позиции - 5 (при яйцах вначале). Если в реальности не так, то нужно дополнительно определить его местоположение:  
=МАКС((КОДСИМВ(ПСТР(A1;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)));1))<150)*(СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)))))  
Формула массива.
 
Всем ОГРОМЕННОЕ спасибо!!!  
Натолкнули на решение. Тот случай, когда обсуждение даёт больше чем конкретное решение :-)  
Воспользовался Ctrl+H. Не оптимально, по чайниковски, но работает. Один файл уже готов, проверил, всё корректно. Потратил около 20-и минут. Следующие быстрее сделаю, проверять уже не надо будет). Если так дело пойдёт, то сегодня закончу.Да чего там сегодня - до обеда успею :-)  
 
ЗЫ =МАКС((КОДСИМВ(ПСТР(A1;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)));1))<150)*(СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)))))  
не понял как работает, но возьму на вооружение:-)  
vikttur, не поясните?
 
СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1))) - ряд чисел от 1 до числа количества символов в ячейке - для последовательного перебора символов.  
ПСТР(A1;СТРОКА(...);1) - символ под номером СТРОКА(...)  
Если КОДСИМВ<150, т.е. не кириллица, то место этого символа - СТРОКА(...)  
Получаем массив из нулей и порядкового номера найденного разделителя.  
Последний штрих - МАКС(...) этого массива.
 
{quote}{login=vikttur}{date=21.01.2010 10:38}{thema=}{post}СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1))) - ряд чисел от 1 до числа количества символов в ячейке - для последовательного перебора символов.  
ПСТР(A1;СТРОКА(...);1) - символ под номером СТРОКА(...)  
Если КОДСИМВ<150, т.е. не кириллица, то место этого символа - СТРОКА(...)  
Получаем массив из нулей и порядкового номера найденного разделителя.  
Последний штрих - МАКС(...) этого массива.{/post}{/quote}  
 
Жесть :-)  
Буду изучать, СПАСИБО!
Страницы: 1 2 След.
Читают тему
Наверх