Взятие строк короче или = 30 символам с учётом пробелов!

ezotonal

Client
Регистрация
13.01.2014
Сообщения
819
Благодарностей
231
Баллы
43
Например есть файл со списком:

дорогой подарок для девушки
дорогой подарок мужчине на 23 февраля
дорогой подарок мужчине на 60 лет
оригинальные подарки руководителю на 23 февраля
подарок директору на 50 лет
подарок директору на день рождения фирмы
подарки генеральному директору
подарки для женщин на юбилей
подарок директору на юбилей 50 лет
[TBODY] [/TBODY]
Как сделать так что б строка проверялась на количество символов и если эта строка удовлетворяет искомому минимуму, то бралась бы из файла!

Хочу автоматизировать для контекстной рекламы, так как там ограничение по количеству символов!
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 113
Благодарностей
8 982
Баллы
113
берем строку из списка в переменную line, подсчитываем ее длину в символах с помощью экшена JavaScript:
Код:
var string = '{-Variable.line-}';
var result = string.length;
и логикой проверяем, делаем ответвление на повторный запрос строки, если более 30 символов и т.д, если менее..
 

ezotonal

Client
Регистрация
13.01.2014
Сообщения
819
Благодарностей
231
Баллы
43
берем строку из списка в переменную line, подсчитываем ее длину в символах с помощью экшена JavaScript:
Код:
var string = '{-Variable.line-}';
var result = string.length;
и логикой проверяем, делаем ответвление на повторный запрос строки, если более 30 символов и т.д, если менее..
Благодарю! А подскажите как например вот предложение в строке длинной 100 символов, и взять из него первые несколько слов сумма которых будет например не больше 40 символов ровна, без обрезания слова
Например: "Существуют две основных трактовки понятия «текст»: «имманентная» (расширенная, философски нагруженная) и «репрезентативная» (более частная)."
И что бы взялось например: "Существуют две основных трактовки" длинна которого 34 символа но не больше 40
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 113
Благодарностей
8 982
Баллы
113
знатоки регулярок и C# сейчас подтянутся наверное - подскажут сниппет или регулярку..
а на кирпичиках можно тоже сделать, но огород получится..
примерно так:
- берем строку
- помещаем ее в список разделенный по пробелам (то есть в каждой строке списка будет по 1 слову)
- начинаем из этого списка циклом дергать строки последовательно и вычислять сумму символов и проверять логикой кол-во
- как только логикой зафиксировался перебор (символов более опред. кол-ва), то последнее слово отбрасываем
- делаем объединение списка с разделителем в виде пробела..

как то так..
 

Irbis

Client
Регистрация
02.03.2014
Сообщения
195
Благодарностей
120
Баллы
43
Код:
string[] parts;
            char sep = ' ';
            string word;
            string resul = "";
            int count = 0;
            //project.Variables["text"] - это переменная с проверяемой строкой.
            parts = project.Variables["text"].Value.Split(sep);
            for (int i = 0; i < parts.Length; i++)
            {
                word = parts[i];
                count += word.Length + 1;
                if (count >= 40)
                {
                    if (count == 40) ; else i--;
                    for (int j = 0; j <= i; j++)
                        resul += parts[j] + sep;
                    break;
                }
            }
             //resul - это переменная результат.
            return resul;
Слова суммируются с учетом пробелов. Чтобы суммировались без учета пробела удалите в строке "count += word.Length + 1;" +1.
 

Irbis

Client
Регистрация
02.03.2014
Сообщения
195
Благодарностей
120
Баллы
43
Что-то не предусмотрел я случай если строка будет меньше 40 символов. Вот так правильнее будет.
Код:
string[] parts;
            char sep = ' ';
            string word;
            string resul = "";
            int count = 0;
              //project.Variables["text"] - это переменная с проверяемой строкой.
            parts = project.Variables["text"].Value.Split(sep);
            for (int i = 0; i < parts.Length; i++)
            {
                word = parts[i];
                count += word.Length + 1;
                if (count >= 40)
                {
                    i = count == 40 ? i : i -= 1;
                    for (int j = 0; j <= i; j++)
                        resul += parts[j] + sep;
                    break;
                }
            }
            resul = resul == "" ? resul = text : resul;
              //resul - это переменная результат.
            return resul;
 
  • Спасибо
Реакции: Wide

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 268
Баллы
113
Это по ходу для яндекс директ нужно TC)
 

ezotonal

Client
Регистрация
13.01.2014
Сообщения
819
Благодарностей
231
Баллы
43
Код:
string[] parts;
            char sep = ' ';
            string word;
            string resul = "";
            int count = 0;
            //project.Variables["text"] - это переменная с проверяемой строкой.
            parts = project.Variables["text"].Value.Split(sep);
            for (int i = 0; i < parts.Length; i++)
            {
                word = parts[i];
                count += word.Length + 1;
                if (count >= 40)
                {
                    if (count == 40) ; else i--;
                    for (int j = 0; j <= i; j++)
                        resul += parts[j] + sep;
                    break;
                }
            }
             //resul - это переменная результат.
            return resul;
Слова суммируются с учетом пробелов. Чтобы суммировались без учета пробела удалите в строке "count += word.Length + 1;" +1.
Благодарю за помощь попробую!
Вообще хотелось бы реализовать так:

В заголовок (1) вставляется строка. Если она удовлетворяет условию (<=30), то шаг переходит
на добавление текста (2). А если же при добавление заголовка (1) строка удовлетворяет условию (>30) то не поместившиеся слова переносились в текст (2).
Например: Взялась строка "Дорогой подарок сыну" удовлетворяет условию (<=30), значит шаг переходит к заполнению текста -


А вот если взялась строка с условием (>30) - "Дорогой подарок другу на день рождения"

Вот как то так....хотелось бы в иделае!
Спасибо за внимание!
 
Последнее редактирование:

ezotonal

Client
Регистрация
13.01.2014
Сообщения
819
Благодарностей
231
Баллы
43

Irbis

Client
Регистрация
02.03.2014
Сообщения
195
Благодарностей
120
Баллы
43
Благодарю за помощь попробую!
Вообще хотелось бы реализовать так:

В заголовок (1) вставляется строка. Если она удовлетворяет условию (<=30), то шаг переходит
на добавление текста (2). А если же при добавление заголовка (1) строка удовлетворяет условию (>30) то не поместившиеся слова переносились в текст (2).
Например: Взялась строка "Дорогой подарок сыну" удовлетворяет условию (<=30), значит шаг переходит к заполнению текста -


А вот если взялась строка с условием (>30) - "Дорогой подарок другу на день рождения"

Вот как то так....хотелось бы в иделае!
Спасибо за внимание!
Если я правильно понял то вот шаблон, который делает все это.
 

ezotonal

Client
Регистрация
13.01.2014
Сообщения
819
Благодарностей
231
Баллы
43
Если я правильно понял то вот шаблон, который делает все это.
Да спасибо это то что нужно, но я попробовал "подарок генеральному директору на юбилей",
На выходе получается Title - подарок генеральному
body - на юбилей
а слово "директору" нет. Как можно подправить что б в body попало то что не уместилось в заголовке "директору на юбилей"
Заранее благодарен!
 
Последнее редактирование:

ezotonal

Client
Регистрация
13.01.2014
Сообщения
819
Благодарностей
231
Баллы
43

Irbis

Client
Регистрация
02.03.2014
Сообщения
195
Благодарностей
120
Баллы
43
Замените в коде
if (title != "" && body == "")
{
for (int i = 30 ; i < text.Length; i++)
body += text;
}
на
if (title != "" && body == "")
{
for (int i = title.Length ; i < text.Length; i++)
body += text;
}
 

Irbis

Client
Регистрация
02.03.2014
Сообщения
195
Благодарностей
120
Баллы
43
body +=text;
 

Irbis

Client
Регистрация
02.03.2014
Сообщения
195
Благодарностей
120
Баллы
43
Что то индекс не хочет постится
Код:
body += text[i];
 

ezotonal

Client
Регистрация
13.01.2014
Сообщения
819
Благодарностей
231
Баллы
43
Что то индекс не хочет постится
Код:
body += text[i];
Очень помогли спасибо!
Хочу вот ещё с помощью логики сделать проверку на наличие слова или корня слова или числа определённого, как это реализовать?
 

Irbis

Client
Регистрация
02.03.2014
Сообщения
195
Благодарностей
120
Баллы
43
можно по совпадению с шаблоном регулярного выражения проверку сделать или с помощью класса System.String.
 

ezotonal

Client
Регистрация
13.01.2014
Сообщения
819
Благодарностей
231
Баллы
43
можно по совпадению с шаблоном регулярного выражения проверку сделать или с помощью класса System.String.
всё перерыл никак не могу понять проверку регулярным выражением
 

Irbis

Client
Регистрация
02.03.2014
Сообщения
195
Благодарностей
120
Баллы
43

Wide

Client
Регистрация
04.02.2013
Сообщения
945
Благодарностей
256
Баллы
63

goodlucker11

Client
Регистрация
12.05.2014
Сообщения
74
Благодарностей
28
Баллы
18
del
 
Последнее редактирование:

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