Замена текста в текстовом файле.

  • Автор темы Автор темы Animal
  • Дата начала Дата начала

Animal

Client
Регистрация
15.06.2016
Сообщения
735
Реакции
130
Баллы
43
Со страницы собирается код, из кода фильтруются нужные слова и результат записывается в текстовый файл. Задача: определенные слова нужно заменить и результат записать в текстовый файл.
 
Определенные слова должны быть в списке.
Далее кладете файл в переменную {-Variable.code-}, например. Берете из списка первую строку с удалением и Regex'ом (поиск и замена) чекаете её в переменной {-Variable.code-}.
Возвращаемся к шагу "берем первую строку из списка с удалением", до тех пор пока не закончатся строки. А после Данные -> Файлы -> Записать текст
 
  • Спасибо
Реакции: VladZen
Определенные слова должны быть в списке.
Вот в том то и дело, что экшн "Данные" результат выводит сразу в список а не в значение какой либо переменной (если выбрать "Все"). Данный функционал экшена задуман разработчиками и в данном случае меня он озадачил. Пришлось сделать по другому, в общих чертах опишу как реализовал замену текста:
  • Преобразовал данные экшеном "Операции над списком" в значения переменной
  • Удалил данные в списке экшеном "Операции над списком"
  • Произвел нужную замену данных в значении переменной
  • Затем результат перевел обратно в список
Все.
 
1. Есть экшен - Прочитать файл. Он возьмёт всё содержимое файла в 1 переменную.
2. Если нужно использовать список, есть экшен - Объеденить элементы списка, который так же складывает все данные списка в одну переменную.
В чем сложность? Я честно говоря до конца не понял что Вы сделали и что из этого получилось.
 
ZennoScript, мне нужно было результат парсинга вывести не в список, а в значение какой-либо переменной. Но увы, экшн Данные принудительно переводит результат в список а не в значение переменной (скриншот)

Снимок.PNG


Зачем так было сделано - не пойму. Ведь переводить данные в список или значение переменной, это личное дело каждого.
Ну да ладно, черт с ним, если отправилось в список... так уж и быть. Тогда мне нужно было обработать результаты списка. Но... вот незадача: в экшене по обработке списка, функции Заменить один текст на другой - нету. А не мешало бы добавить (Заменить) В результате чего, мне пришлось добавлять лишних 4 экшена, что бы заменить один текст на другой в одном и том же списке. Вот если была бы функция Заменить, в экшене Операции над списком, тогда мне пришлось делать не 4 экшина, а всего навсего одним.
 
Последнее редактирование:
Так а в чем проблема добавить в список и потом объединить список в переменную ?
 
спарсь в динамический список а потом кинь весь этот список в переменую
 
Screenshot_1.png
 
Что бы всем было понятно в чем суть вопроса, приведу пример.
Результаты парсинга сформировались в список:

Код:
Развернуть Свернуть Копировать
Перечень вариантов это: регексп
Перечень вариантов это: регексы
Перечень вариантов это: регеспы
Перечень вариантов это: регулярки
Перечень вариантов это: регулярное выражение

Задача: заменить слова "Перечень вариантов это:" в каждой строке списка, на любые другие. К примеру:

Код:
Развернуть Свернуть Копировать
Регулярные выражения: регексп
Регулярные выражения: регексы
Регулярные выражения: регеспы
Регулярные выражения: регулярки
Регулярные выражения: регулярное выражение

Результат замены текста нужно записать снова в один и тот же список с удалением прежних записей.
У меня получилось решить вопрос 4-мя экшинами. Хотя в идеале, думаю, можно переделать выполнение действия двумя-тремя экшинами.
 
C#:
Развернуть Свернуть Копировать
var list = project.List["ResultList"]; // Список с результатами
Tab tab = instance.ActiveTab;
// Ожидание загрузки страницы
if (tab.IsBusy) tab.WaitDownloading();
// Получаем DOM страницы
string text = tab.DomText;
Regex reg = new Regex(@"Регулярка");
// Поиск всех совпадений
MatchCollection matchCol = reg.Matches(text);
for (int i = 0; i < matchCol.Count; i++)
{
    // Проверяем, успешно ли совпадение
    if (matchCol[i].Success)
        // Если успешно, добавляем результат парсинга в список (с заменой)
        list.Add(matchCol[i].Value.Replace("Что заменить", "На что заменить"));
}
 
Уже почти готовый парсер. Только одна проблема - не корректно берется ссылка на фото с расширением gif. Подскажите, как эффективно брать адрес ссылки на фото с расширением gif? (посты в ОК)
 
Уже почти готовый парсер. Только одна проблема - не корректно берется ссылка на фото с расширением gif. Подскажите, как эффективно брать адрес ссылки на фото с расширением gif? (посты в ОК)
экстрасенсов тут мало. Сложно догадаться в чём именно у тебя проблема и тем более, как её решить
 
экстрасенсов тут мало. Сложно догадаться в чём именно у тебя проблема и тем более, как её решить
Я не думаю, что человек который не делал парсера постов соц. сети ОК, сможет мне вообще помочь в данном вопросе. А разжевывать вопрос профессионалам в деталях - не корректно. Суть вопроса кратко была изложена, кто в теме - без напряга поймет о чем речь. Будьте добры, не отнимайте у меня и себя время пустой болтовней если не знаете как решить вопрос.
 
Ну что же... парсер постов для соц.сети ОК готов. Оптимизоровал, доработал функционал в целом. На одну страницу припадает 9 постов. Максимально удается спарсить примерно 1600-1700 постов (разница между погрешностью зависит от группы). После этого количества спарсеных постов, функция "Показать еще" исчезает. Таким образом, 1600-1700 постов - это потолок. Данное ограничение не касается ПУ администратора группы, но это уже другой парсер и то, только для своих групп а не для чужих)
Надеюсь, эти данные помогут другим новичкам при построении парсера постов ОК. Кстати, посты с пометкой "промо" не парсятся. Наверное у них другое значения кода поста, но это только в плюс при парсинге постов)
К сожалению... проблему с gif фото так и не решил. Наверное придется из некорректного значения формировать корректное, но это как минимум 4 экшена и выше, трындец...
 
C#:
Развернуть Свернуть Копировать
var list = project.List["ResultList"]; // Список с результатами
Tab tab = instance.ActiveTab;
// Ожидание загрузки страницы
if (tab.IsBusy) tab.WaitDownloading();
// Получаем DOM страницы
string text = tab.DomText;
Regex reg = new Regex(@"Регулярка");
// Поиск всех совпадений
MatchCollection matchCol = reg.Matches(text);
for (int i = 0; i < matchCol.Count; i++)
{
    // Проверяем, успешно ли совпадение
    if (matchCol[i].Success)
        // Если успешно, добавляем результат парсинга в список (с заменой)
        list.Add(matchCol[i].Value.Replace("Что заменить", "На что заменить"));
}
Может кому то будет полезно, в этом скрипте в 1 строке
"var list = project.List["ResultList"]" - Ошибка.
"var list = project.Lists["ResultList"]" - нужно так.
Я 2 дня не мог понять чего оно не работает ))
 
Последнее редактирование:

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