Подскажите как грамотно обрезать строку

Регистрация
02.12.2014
Сообщения
30
Благодарностей
3
Баллы
8
У меня вот такой заголовок - Заправка картриджей Q2612A для HP LJ 1010, 1012, 1015
мне надо чтобы отрезало до 45 знаков, если это середина слова, то соответственно резало по последнему целому слову и если попадется в конце запятая, то чтобы ее откидывало и в конце ставило три точки
т.е. должно получиться - Заправка картриджей Q2612A для HP LJ 1010...
 

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 267
Благодарностей
5 853
Баллы
113
Обработка текста>Подстрока - от 0 до 45.
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 513
Благодарностей
8 702
Баллы
113
Подстрокой резаться будет..
 
Регистрация
02.12.2014
Сообщения
30
Благодарностей
3
Баллы
8
Во во. а нужно чтобы слова не резал
 

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 267
Благодарностей
5 853
Баллы
113

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 513
Благодарностей
8 702
Баллы
113
можно вычислять в строке кол-во слов и делать обрезание не по кол-ву символов, а по кол-ву слов..
то есть составить регулярку, чтобы строка резалась на определенном пробеле по его номеру..
как то делал подобное, но сейчас не припомню именно как и в каком проекте.. :-)
кажется именно по пробелам резал..

Код:
    //кол-во слов = кол-во пробелов + 1
    
    var text = project.Variables["text"].Value.ToCharArray();
    int count = 1;
    foreach(var ch in text)
    {
        if(ch==' ')
        {
            count++;
        }
    }
    return count;
 
  • Спасибо
Реакции: Dorian_Gray

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 267
Благодарностей
5 853
Баллы
113
можно вычислять в строке кол-во слов и делать обрезание не по кол-ву символов, а по кол-ву слов..
то есть составить регулярку, чтобы строка резалась на определенном пробеле по его номеру..
как то делал подобное, но сейчас не припомню именно как и в каком проекте.. :-)
кажется именно по пробелам резал..
Но пользователь просит по кол-ву символов обрезать - до 45.
 
Последнее редактирование:

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 513
Благодарностей
8 702
Баллы
113
Но ользователь просит по кол-ву символов обрезать - до 45.
да, я просто предложил альтернативу..
зная среднее кол-во слов в 45 символах, можно сделать такое упрощение и считать именно слова..

но это конечно не оч. красивое решение..
к тому же текст технический, с аббревиатурами и прочим..
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 513
Благодарностей
8 702
Баллы
113
да, я просто предложил альтернативу..
зная среднее кол-во слов в 45 символах, можно сделать такое упрощение и считать именно слова..

но это конечно не оч. красивое решение..
к тому же текст технический, с аббревиатурами и прочим..
PS:
гыы, я кажется вспомнил как я решал аналогичную задачу..
решение смешное, даже стыдно его тут рассказывать..
прогеры на C# и маститые регулярщики обсмеют.. :-)
 
Последнее редактирование:
Регистрация
02.12.2014
Сообщения
30
Благодарностей
3
Баллы
8

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 513
Благодарностей
8 702
Баллы
113
Решение в студию)
перед циклом:

- строку, которую нужно обрезать кладем в список с разделителем "пробел"..

сам цикл:

- начинаем брать с удалением первую строку, складывать в другой промежуточный список
- объединять этот промежуточный список в переменную с пробелами и считать кол-во символов
- как только случился перебор по кол-ву символов, выходим из цикла, добавляем многоточие в конце..
 
Регистрация
02.12.2014
Сообщения
30
Благодарностей
3
Баллы
8
перед циклом:

- строку, которую нужно обрезать кладем в список с разделителем "пробел"..

сам цикл:

- начинаем брать с удалением первую строку, складывать в другой промежуточный список
- объединять этот промежуточный список в переменную с пробелами и считать кол-во символов
- как только случился перебор по кол-ву символов, выходим из цикла, добавляем многоточие в конце..
Что то не до конца пойму как цикл сделать. А именно:
- 1. как складывать в другой промежуточный список?
- 2. объединять этот промежуточный список в переменную с пробелами и считать кол-во символов

Разобрался! Спасибо!
 
Последнее редактирование:

blud

Client
Регистрация
19.04.2011
Сообщения
657
Благодарностей
77
Баллы
28
уже спрашивал как то (оч. давно) на этом форуме... подсказали регулярку: [\w\W]{1,45}(?=\ ) пользуюсь проблем небыло
 
Регистрация
02.12.2014
Сообщения
30
Благодарностей
3
Баллы
8

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 450
Благодарностей
1 880
Баллы
113
перед циклом:

- строку, которую нужно обрезать кладем в список с разделителем "пробел"..

сам цикл:

- начинаем брать с удалением первую строку, складывать в другой промежуточный список
- объединять этот промежуточный список в переменную с пробелами и считать кол-во символов
- как только случился перебор по кол-ву символов, выходим из цикла, добавляем многоточие в конце..
Вот это подход! До такого еще додуматься нужно :-)
А что, если после взятия последнего слова получилось не 45, а 50 символов? Удалять последнее? :-)
Регулярка [\w\W]{1,45}(?=[\ \.,!\?]) куда проще с этим справляется :-)
 
  • Спасибо
Реакции: Rain

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 513
Благодарностей
8 702
Баллы
113
Вот это подход! До такого еще додуматься нужно :-)
А что, если после взятия последнего слова получилось не 45, а 50 символов? Удалять последнее? :-)
Регулярка [\w\W]{1,45}(?=[\ \.,!\?]) куда проще с этим справляется :-)
согласен, регулярка проще и эффективнее..
а по поводу что более 45 символов по моему методу, думаю это не так страшно, будет плюсом несколько знаков..
ну при необходимости можно мой метод модернизировать, чтобы после цикла регуляркой откусывать последнее слово в строке, получится менее 45 символов..

но, конечно же, если регулярка на руках - это не актуально.. :-)
 
Регистрация
02.12.2014
Сообщения
30
Благодарностей
3
Баллы
8
уже спрашивал как то (оч. давно) на этом форуме... подсказали регулярку: [\w\W]{1,45}(?=\ ) пользуюсь проблем небыло
Это решение подходит если в переменной от 45 символов. Если меньше, то режет последнее слово. Как быть, если одно слово и 10 символов, и чтобы не трогала это слово если оно меньше 45 символов?
 
Регистрация
02.12.2014
Сообщения
30
Благодарностей
3
Баллы
8
Разобрался) Сделал так:
Считаю кол-во знаков в переменной. Если меньше 45, то не трогаю его. Если больше, использую переменную \w\W]{1,45}(?=\ ) , которая режет до 45 символов и потом ставлю в конце ...
 

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 450
Благодарностей
1 880
Баллы
113
Это решение подходит если в переменной от 45 символов. Если меньше, то режет последнее слово. Как быть, если одно слово и 10 символов, и чтобы не трогала это слово если оно меньше 45 символов?
Используюйте такую регулярку - [\w\W]{1,45}(?=[\ \.,!\?\r\n$])
Она похожа на то, что было выше, но немного улучшена.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)