Иногда нужно совершить некоторые действия со строками, т.е с полученными данными, которые нельзя сделать заменами. Или можно, но не всегда это удобно. В Датакол со строками можно работать через Динамический плагин. Это по сути язык программирования C# с .NET4.
Работа с получением данных в Датакол проходит в такой последовательности:
- Датакол получает строку в исходном коде, т.е со всеми данными и тегами.
- Дальше, если у вас установлено "Удалять теги", то вы получаете строку без тегов, только текст. Соответственно, если вы сохраняете теги, или сохраняете только определенные - то в нужном виде получаете строку.
- Далее, если Вы указали какие-то замены, то они применяются. Причем применяются в такой последовательности, в которой они указаны, сверху вниз. Причем будьте внимательны, еще есть глобальные замены для полей. Они применяются ко всем полям.
- Далее, уже, если задействован, применяется динамический плагин.
Теперь перейдем непосредственно к практике. В этой статье я покажу простые примеры, если эта тема будет интересной, но дальше можем перейти к более сложным.
Для всех примеров схема действий простая:
- Открываем вкладку "Дополнительно" для нужного поля.
- Отмечаем галочкой "Активен" для блока "Динамический плагин обработки поля"
- Нажимаем кнопку "Редактировать".
- Вставляем ниже указанные примеры до строки "return s;".
Изменить все символы на нижний регистр
s = s.ToLower();
Изменить все символы на верхний регистр
s = s.ToUpper();
Узнать длину строки
s = s.Length.ToString();
P.S Т.к свойство Length возвращается в int, поэтому нужно его конвертировать в строку ToString(), т.к "s" у нас строка.
Вставка символа или значения на определенную позицию
s = s.Insert(10,"...");
Т.е на 10й позиции строки вставится "..."
Удаляем все символы, начиная с n-позиции
s = s.Remove(5);
Этим мы удалим все символы, начиная с 5-го
P.S устите, что у всех строк отсчет начинается с 0, т.е 1й символ имеет индекс 0.
Получаем часть строки, начиная с n-позиции
s = s.Substring(7);
В этом примере мы получим часть строки, после 7-го символа.
Немного усложним, скомбинируем и добавим условие.
Делаем первый символ заглавным
s = s.Remove(1).ToUpper() + s.Substring(1);
- s.Remove(1).ToUpper() - оставляем только 1й символ и переводим его в верхний регистр
- s.Substring(1) - удаляем первый симвом оставля при этом все остальные
- С помощью знака "+" мы соединяем текст
Также еще как вариант, когда нужно все остальные символы сделать маленикими, кроме первого
s = s.Remove(1).ToUpper() + s.Substring(1).ToLower();
Проверяем длину строки, если она больше нашего значения, до добавим в конце значение
Это будет полезно, например, для парсинга короткого описания. Предположим, что в короткое описание влазит не более 200 символов.
int slen = 200; // Задаем макс длину строки if (s.Length > slen) // проверяем, если она больше макс длины { s = s.Remove(slen - 4); // Если больше, то вычитаем 4 символа, чтобы влез пробел и троеточие s = s + " ..."; // добавляем значение для конча строки }
Думаю, на сегодня хватит для первого раза. Если понравился такой формат - то пишите в коментах. Также пишите, Ваши пожелания, что рассмотреть.
Спасибо, благодаря Вам разберусь наконец с плагинами.
Сразу вопрос, можно ли с помощью плагина открыть скрытое содержание или очередность не обойдёшь и плагин можно использовать только для обработки полученного кода.
Динамический плагин поля работает только с данными которое это поле получает. Т.е. даже с кодом страницы он не сможет работать.
Для глобальных целей нужно писать полноценный плагин.
А будет ли еще статьи по работе с Датаколом?
Да, будут. Правка пока со временем сложно. Можете также написать темы, которые Вам интересны.
Спасибо. Очень полезно и своевременно!
Мне как раз нужно поднять регистр всех слов в строке.
В вашем примере
поднимается регистр только первого символа, а как сделать, чтобы был поднят регистр все первых символов каждого слова в строке?
Попробуйте так
s = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(s);
Это оно! Огромная вам благодарность!
Буду вникать. Есть над чем работать.
Пытаюсь решить еще одну задачу. Бывает, что строка длиннее чем нужно и необходимо ее обрезать к примеру после третьего слова. Пожалуйста, подскажите, как это сделать.
Слова разделены пробелами, создаем массив, и берем первые три
string[] words = s.Split(' ');
if (words.Length > 3)
{
s = string.Join(" ", words, 0, 3);
}
Это только мысли, дальше подстраивайте под вас
Благодарен за помощь!