Добрый день. Помогайте пожалуйста. Требуется удалить все лишние слова в предложении после последнего пробела в пределах 38 символов. При этом если длинна последнего слова будет меньше 3х символов - то его тоже удалить. Ну и пробел в конце не оставить.
Допустим, есть фраза "Купить квартиру в Москве недорого по низкой цене" Нужно оставить целые слова в пределах 38 символов, т.е. в остатке: "Купить квартиру в Москве недорого" Спасибо!
Добрый день. Помогайте пожалуйста. Требуется удалить все лишние слова в предложении после последнего пробела в пределах 38 символов. При этом если длинна последнего слова будет меньше 3х символов - то его тоже удалить. Ну и пробел в конце не оставить.
Допустим, есть фраза "Купить квартиру в Москве недорого по низкой цене" Нужно оставить целые слова в пределах 38 символов, т.е. в остатке: "Купить квартиру в Москве недорого" Спасибо!scaels1
Должен быть какой-то алгоритм - например можно найти пробелы например, первый-второй, последний пробел, третий с конца и извлекать нужное кол-во символов. Но машина сама по себе не поймет что "по" здесь лишнее.
Можно например с 30го символа искать далее пробел и извлекать с начала и до этого первого пробела после 30го символа
Код
=ЛЕВСИМВ(A1;НАЙТИ(" ";A1;30))
Должен быть какой-то алгоритм - например можно найти пробелы например, первый-второй, последний пробел, третий с конца и извлекать нужное кол-во символов. Но машина сама по себе не поймет что "по" здесь лишнее.
Можно например с 30го символа искать далее пробел и извлекать с начала и до этого первого пробела после 30го символа
Leana, спасибо за содействие. Тоже много думал уже. Такой алгоритм не пойдет, потому что может быть слово, начинающееся где нибудь на 27 символе, и заканчивающееся на 40..
Leana, спасибо за содействие. Тоже много думал уже. Такой алгоритм не пойдет, потому что может быть слово, начинающееся где нибудь на 27 символе, и заканчивающееся на 40..scaels1
Ого. вот это формула! Но у меня она почему то ошибку выдает. Файл приложил. Посмотрите пожалуйста, что не так? [moder]Не надо цитировать посты целиком[/moder]
Ого. вот это формула! Но у меня она почему то ошибку выдает. Файл приложил. Посмотрите пожалуйста, что не так? [moder]Не надо цитировать посты целиком[/moder]scaels1
Pelena, спасибо больше! ваш вариант в целом работает, единственное, 1. он удаляет короткий хвостик, даже если строка меньше требуемой длинны, а этого не требуется, ведь мы итак вмещаемся в заданную длину (привел пример ниже по отношению к строкам с ограничением на 33 символа) 2. удаляя короткие хвостики, если идут допустим 2 коротких окончания подряд, то удалит только одно, а надо что бы коротких остатков в конце вообще не оставалось, при условии что мы не вместились в заданную длину и пришлось обрезать.
Исходное: Результат: корпоративные подарки к нг | корпоративные подарки к - т.е. длина исходной строки укладывается в заданную в 33 символа, но при этом все равно обрубается окончание, чего не требуется.
Исходное: Результат: корпоративные подарки к 23 февраля | корпоративные подарки к - т.е. во второй фразе, 34 символа - превышение 33. надо удалить "февраля" и короткие окончания которые 3 и меньше символа в длину. должно было бы получиться "корпоративные подарки"
Возможно ли исправить эти нюансы? Спасибо!
Pelena, спасибо больше! ваш вариант в целом работает, единственное, 1. он удаляет короткий хвостик, даже если строка меньше требуемой длинны, а этого не требуется, ведь мы итак вмещаемся в заданную длину (привел пример ниже по отношению к строкам с ограничением на 33 символа) 2. удаляя короткие хвостики, если идут допустим 2 коротких окончания подряд, то удалит только одно, а надо что бы коротких остатков в конце вообще не оставалось, при условии что мы не вместились в заданную длину и пришлось обрезать.
Исходное: Результат: корпоративные подарки к нг | корпоративные подарки к - т.е. длина исходной строки укладывается в заданную в 33 символа, но при этом все равно обрубается окончание, чего не требуется.
Исходное: Результат: корпоративные подарки к 23 февраля | корпоративные подарки к - т.е. во второй фразе, 34 символа - превышение 33. надо удалить "февраля" и короткие окончания которые 3 и меньше символа в длину. должно было бы получиться "корпоративные подарки"
Function dd$(str$, lim&) Dim arr(), i&, n&, k& str = Application.Trim(str) ReDim arr(i) arr(i) = Len(Split(str, " ")(i)) n = arr(i) + 1 Do Until i = UBound(Split(str, " ")) k = Len(Split(str, " ")(i + 1)) If n + k > lim Then Exit Do i = i + 1: ReDim Preserve arr(i) arr(i) = k: n = n + k + 1 Loop Do Until arr(i) > 3 n = n - 1 - arr(i) i = i - 1 Loop dd = Left(str, n) End Function
[/vba]
вариант с UDF
[vba]
Код
Function dd$(str$, lim&) Dim arr(), i&, n&, k& str = Application.Trim(str) ReDim arr(i) arr(i) = Len(Split(str, " ")(i)) n = arr(i) + 1 Do Until i = UBound(Split(str, " ")) k = Len(Split(str, " ")(i + 1)) If n + k > lim Then Exit Do i = i + 1: ReDim Preserve arr(i) arr(i) = k: n = n + k + 1 Loop Do Until arr(i) > 3 n = n - 1 - arr(i) i = i - 1 Loop dd = Left(str, n) End Function
krosav4ig, работает, но например в случае "подарок на 17 лет" оставляет просто "подарок" а в случае "подарок другу на 16 лет" - "подарок другу" т.е. удаляет короткие хвосты, хотя не должен, ведь длинна строки меньше заданной.
при этом если окончание строки больше 4х символов и вся строка меньше 33х - то он делает все правильно - оставляет без изменений.
krosav4ig, работает, но например в случае "подарок на 17 лет" оставляет просто "подарок" а в случае "подарок другу на 16 лет" - "подарок другу" т.е. удаляет короткие хвосты, хотя не должен, ведь длинна строки меньше заданной.
при этом если окончание строки больше 4х символов и вся строка меньше 33х - то он делает все правильно - оставляет без изменений.scaels1
Единственное - подскажите еще пожалуйста, что сделать, что бы макрос еще убирал за собой последний пробел в конце строки, который иногда остается после обработки? СЖПРОБЕЛЫ не помогает... И как возможно из строки убирать ненужные слова, если они в ней встречаются? Например слова: это, как, что.
Единственное - подскажите еще пожалуйста, что сделать, что бы макрос еще убирал за собой последний пробел в конце строки, который иногда остается после обработки? СЖПРОБЕЛЫ не помогает... И как возможно из строки убирать ненужные слова, если они в ней встречаются? Например слова: это, как, что.scaels1
Сообщение отредактировал scaels1 - Понедельник, 22.12.2014, 23:33