Страницы: 1
RSS
Разбить текст по столбцам, когда разделителя нет
 
У меня есть текст (состав товара). Написан как попало, может быть с пробелами, запятыми,точками, слешами, знаком % или вообще без всего. Как-то так: 18%лен,45%хлопок35ПЭ2/%ПА  
Необходимо разбить это как-то по столбцам, с целью дальнейшей загрузки в 1С. Устроит даже если получится в одной ячейке число, в другой слово, потом опять число и так далее.  
В файле несколько разных строк для примера.  
Голову себе сломала, придумать ничего не могу. Обработать надо 8000 строк...
 
я бы посоветовал, для начала привести текст к одному типу что бы разделителями служили не разные знаки типа%,; и т. д. а например пробел. Делается это простой заменой % на пробел, ; на пробел и т. д. Затем к получишимся строкам применить формулу СЖПРОБЕЛЫ().  
А уж потом колдовать макросом.
Редко но метко ...
 
К одному типу привести очень сложно, если только удалить все знаки (пробелы, запятые, слэши, проценты и тд) и оставить только буквы и цифры без пробелов.  
Как идея вычислить номер первого вхождения цифры в полученной абракадабре. Потом уже цифры обставить знаками (пробелом или подчеркиванием), а по ним уже разбить на столбцы. Но как вычислить это самое вхождение?  
Если тупо по % разбить то из  
18%вискоза 82%ПА  
получится  
18   вискоза82   ПА  
А это совсем не то...
 
Зачем же тупо ).  
 
Если заменить % на пробел в  
18%вискоза 82%ПА  
получится  
18 вискоза 82 ПА - затем на всяк случай СЖПРОБЕЛЫ,  
и получившуюся строку можно разбить на 4 значения по пробелам.  
Ну а если у вас есть строки где числа не отделены от букв, то отделить их можно макросом, это не сложно, главное понимать где нужно отделять.  
Вот тут 11шерсть как я понимаю нужно отделить, а тут ПЭ9 нужно или нет, вы же не объясняете конкретно, а что бы вам помочь необходимо знать все тонкости.
Редко но метко ...
 
Как идея - выпрямить руки тому, кто так набирал. Возможно под гидравлическим прессом. Потом пусть переделывает. После всех этих мероприятий и форум не нужен:-)
Я сам - дурнее всякого примера! ...
 
Сначала лирика (щас все лягут): у нас в базе состав номенклатуры написан в комментарии и от туда попадает на ценник. Хотя я думаю всем известно, что 1С имеет специальное свойство "состав", но нам оно на кой! Так бы все и жили мирно набивая эту хренотень в комментарий. Но вот мы переходим на новую версию 1С и туда надо все перенести. Вот... И вопрос стоит ребром... Все что было сразу понятно, я уже подчистила. Осталась муть на 8000 строк.  
Попытаюсь еще разок нюансы пояснить:  
логики в разделителях нет. Может быть как угодно и с % и без и через любой другой знак. Мне кажется, что проще сначала избавиться от всех излишних знаков, а потом как-то делить. Вопрос как потом можно все расчленить?
 
Вариант с регулярными выражениями. Набросал на скорую руку.
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Вариант - пример как можно разбить обработанную строку по ячейкам. см файл (без регулярных)
Редко но метко ...
 
Формула массива:  
 
=ПОДСТАВИТЬ(A2;ПСТР(A2;НАИМЕНЬШИЙ(ЕСЛИ(ПОИСКПОЗ(КОДСИМВ(ПСТР($A2;СТРОКА($1:$99);1)&1);{1;48})=1;СТРОКА($1:$99));СТРОКА($A$1:$A$10));1);" ")
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Владимир, чем результат работы формулы отличается от этой?  
=ПОДСТАВИТЬ(A1;"%";" ")  
 
Пример формул без доп. обработки в файле.
 
{quote}{login=vikttur}{date=18.01.2012 04:17}{thema=}{post}Владимир, чем результат работы формулы отличается от этой?  
=ПОДСТАВИТЬ(A1;"%";" ")  
 
Пример формул без доп. обработки в файле.{/post}{/quote}  
 
Не проверил на других символах, спать хотелось. Значит ПОДСТАВИТЬ находит только первый символ, а с массивом не работает. Становится интересно..
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
{quote}{login=Владимир}{date=18.01.2012 09:31}{thema=Re: }{post}{quote}{login=vikttur}{date=18.01.2012 04:17}{thema=}{post}Владимир, чем результат работы формулы отличается от этой? =ПОДСТАВИТЬ(A1;"%";" ")...{/post}{/quote}  
... Значит ПОДСТАВИТЬ находит только первый символ, а с массивом не работает. Становится интересно..{/post}{/quote}  
Почему "только первый"?! Не указывать номер вхождения и...  
-44377-
 
Всем огромное спасибо!!!! Сделала за три минуты. А сэкономленное время оставлю на разбор полетов. Хочется еще и понять, как это сделано.  
Еще раз спасибо.
 
{quote}{login=}{date=18.01.2012 10:54}{thema=}{post}Всем огромное спасибо!!!! Сделала за три минуты. А сэкономленное время оставлю на разбор полетов. Хочется еще и понять, как это сделано.  
Еще раз спасибо.{/post}{/quote}  
Это все были мои благодарности. Спасибо, спасибо, спасибо!
 
Массив, который выделяет символы, которые нужно удалить:  
 
ПСТР(A2;НАИМЕНЬШИЙ(ЕСЛИ(ПОИСКПОЗ(КОДСИМВ(ПСТР($A2;СТРОКА($1:$99);1)&1);{1;48})=1;СТРОКА($1:$99));СТРОКА($A$1:$A$10));1)  
 
..думал, что ПОДСТАВИТЬ заменит все эти символы на пробел, но он только первый попавшийся символ заменил.  
 
-----------------  
.. буду думать, а возможно ли это.
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
=ПОДСТАВИТЬ(где;символ1;символ2)  
Заменит все символ1 на символ2. Или я не понял, чего хочет Владимир.
 
=ПОДСТАВИТЬ(где;{символ1;символ2;символ3...};" ")
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
{quote}{login=Владимир}{date=18.01.2012 07:30}{thema=}{post}=ПОДСТАВИТЬ(где;{символ1;символ2;символ3...};" "){/post}{/quote}Введи как формулу массива в несколько ячеек в строке...
 
.. вот как-то так пытаюсь, но пока безуспешно.
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Владимир, с regexp многое возможно ; ) И это только малая часть... (писал на скорую руку)
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
че т я там дал жару ^_^ Вместо этого шаблона  
.Pattern = "[^\dA-Za-zА-яЁё ]*(?=[\dA-Za-zА-яЁё ]+?)"
можно использовать этот  
.Pattern = "[^\dA-Za-zА-яЁё ]+?"
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
{quote}{login=Владимир}{date=18.01.2012 07:30}{thema=}{post}=ПОДСТАВИТЬ(где;{символ1;символ2;символ3...};" "){/post}{/quote}  
Так не будет работать. Только  
=ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(где;символ1;" ");символ2;" ");символ3;" ")
Страницы: 1
Читают тему
Наверх