Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Topic started by: Aleksandr31 on November 08, 2014, 02:32:27 AM

Title: поиск в текстовом файле
Post by: Aleksandr31 on November 08, 2014, 02:32:27 AM
Привет Всем Гуру Кликермана :). Столкнулся с такой задачкой, есть текстовый файл с огромным количеством строк. Надо выбрать только требуемые строки, содержащие ключевое слово. Их можно записать либо в новый файл (предпочтительно) или редактировать имеющийся. Скурил весь форум но что то подобного не нашёл, неужели никому не требовалось  поиск текста из текстового файла или если я пропустил, ткните носом пожалуйста, с кликером в принципе разобрался, но как осуществить поиск текста а не картинки, ну НЕ ВРУБАЮСЬ  :-\. Если подскажите как обработать тот же  текст сразу в буфере, ну это вообще будет просто СУПЕР. Заранее Спасибо. ::)
Title: Re: поиск в текстовом файле
Post by: quant13 on November 08, 2014, 07:12:59 AM
1. делаем цикл по TFCOUNT ("file") - числовая функция; возвращает кол-во строк в файле
2. STRREADLN ("file", strn) - строковая функция; считывает строку из файла
3. STRPOS ("str", "substr") - числовая функция; возвращает позицию подстроки в строке
4. STRWRITELN ("file", "str", [rewrite]) - записывает строку в конец файла
Все взято из справки.язык сценариев.строки и файлы
если покопать там еще больше ухищрений сделать можно
Title: Re: поиск в текстовом файле
Post by: Oraven on November 08, 2014, 01:39:21 PM
Учти что если в тексте есть символы "$# кликер поломает строку или выдаст ошибку

Входной файл должен иметь имя "input.txt", текст помещается в "output.txt"
Code: (clickermann) [Select]
$str2 = "слово" // слово для поиска

FOR($a=1,$a<TFCOUNT ("input.txt"))
   $str = TFREAD ("input.txt", $a)
   IF(STRPOS($str, $str2) > 0)
      TFWRITE("output.txt", $str)
   END_IF
END_CYC

HALT
Title: Re: поиск в текстовом файле
Post by: Aleksandr31 on November 09, 2014, 08:23:15 PM
спасибо, но чего то не работает :-\.
$str2 = "Город" // слово для поиска
 
FOR($a=1,$a<TFCOUNT ("skan.txt"))
   $str = TFREAD ("skan.txt", $a)
   IF(STRPOS($str, $str2) > 0)
      TFWRITE("output.txt", $str)
   END_IF
END_CYC
 
HALT

пример файла во вложении
Title: Re: поиск в текстовом файле
Post by: Oraven on November 09, 2014, 08:59:08 PM
Написал же наличие этих символов "$# в тексте недопустимо. Удаляешь все кавычки из файла и все начинает работать.
Кликер как бы не предназначен тексты обрабатывать.

Title: Re: поиск в текстовом файле
Post by: Johnny on November 09, 2014, 09:56:51 PM
а еще можно немного ускорить скрипт, если вынести из шапки цикла функцию tfcount, иначе она будет вызываться каждую итерацию.
а поскольку размер файла в процессе не меняется, это только лишние операции. лучше вызвать ее один раз перед циклом и сохранить результат в переменную.

хотя работать будет конечно и так и так
Title: Re: поиск в текстовом файле
Post by: Aleksandr31 on November 09, 2014, 11:09:58 PM
у меня вот такая хрень вылазит
Ошибка при интерпретации строки: $str=
даже после удаления "
и даже уже скачал твой отредактированный файл txt, всё ровно тоже самое, что такое может быть?
Title: Re: поиск в текстовом файле
Post by: Aleksandr31 on November 10, 2014, 01:34:24 AM
Всё, обнаружил, что поиску мешают пустые строки, после их удаления всё заработало. А насчет поиска прямо в буфере, как я понимаю, не удалишь "" работать не будет, жаль. Может в следующей версии кликера появится полноценная возможность работы также и с текстом. Или может кликер можно подружить с uvFilesCorrector.
Спасибо за помощь.
Title: Re: поиск в текстовом файле
Post by: ksa-nsk on November 10, 2014, 08:58:38 PM
в кликере есть возможность запуска стороннего приложения, если есть желание, можешь скачать себе куда-нибудь в папку редактор "sed", у него возможности огромные, причём, если не ошибаюсь, он в состоянии обрабатывать огромные текстовые файлы перебирая построчно и без тормозов. Только там надо немного приловчиться к регулярным выражениям, и свой текст можешь колбасить вдоль-поперек - можешь сразу в отдельный файл сбросить из всего тества только нужные тебе строки, а точнее, части из этих строк, а потом делай своё злодейство просто перебирая строки. У меня sed к 1С так прикручен, доволен на все сто...