Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: Torari on March 19, 2014, 07:16:09 PM
-
Доброго времени суток.
Есть .txt файл, в который записываются 5ть результатов, назовем их a,b,c,d,e. Записываются они в одну строку, разделением служат двойные кавычки и пробел (или tab). В общем виде это выглядит так: "a" "b" "c" "d" "e"
Приведу примеры:
"03/19/2014 10:08:00.928" "1.40308684" "43681" "25" "11"
"03/19/2014 10:08:40.92" "0.6242804501" "348" "672" "952"
"03/19/2014 10:07:10" "1.0929281" "68" "2572" "7"
Где
a= 03/19/2014 10:08:00.928 b = 1.40308684 c = 43681 d = 25 e = 11
a= 03/19/2014 10:08:40.92 b = 0.6242804501 c = 348 d = 672 e = 952
a= 03/19/2014 10:07:10 b = 1.0929281 c = 68 d = 2572 e = 7
Примечание - заранее длинна символов не известна для каждого значения a,b,c,d,e
Задача - извлечь a,b,c,d,e в соответствующие переменные.
-
Проблема в кавычках, ими помечаются строковые значения, но сами кавычки в строках указывать нельзя.
-
тоже на кавычки наперся и застрял )
-
Для теста создаем в папке проекта текстовый файл "input.txt" с текстом из первого поста:
"03/19/2014 10:08:00.928" "1.40308684" "43681" "25" "11"
"03/19/2014 10:08:40.92" "0.6242804501" "348" "672" "952"
"03/19/2014 10:07:10" "1.0929281" "68" "2572" "7"
Забираем результаты (разделенные двойными кавычками):
LOGCLEAR // Очищаем лог
DEFINE($srt_n, 1) // Начнем чтение с первой строки
$srt_count = TFCOUNT("input.txt") // Количество строк во входном файле
WHILE($srt_n > $srt_count)
HALT // Если количество проверяемых строк превышает количество строк в файле, то сценарий завершается
ELSE
$srt = STRFILTER( TFREAD("input.txt", $srt_n), ":./ 0123456789", 1) // Считываем из файла и отфильтровываем строку
//--------------------------------
// Первая искомая переменная (строковое значение) состоит из двух частей, разделенных пробелом
$a_1 = STRCONCAT (STRCUT($srt, 1, 10), " ") // Дата всегда содержит одинаковое количество символов
$srt = STRREPLACE ($srt, $a_1, "") // Заменяем в строке первую часть переменной a пустышкой
$a_2 = STRCUT ($srt, 1, STRPOS($srt, " ") - 1 )
$a = STRCONCAT($a_1, "", $a_2) // Склеиваем переменную a
//--------------------------------
$srt = STRREPLACE ($srt, STRCONCAT($a_2, " "), "") // Отрезаем от строки остатки переменной a и пробел
$b = STRCUT ($srt, 1, STRPOS($srt, " ") - 1 )
//--------------------------------
$srt = STRREPLACE ($srt, STRCONCAT($b, " "), "") // Отрезаем от строки переменную b и пробел
$c = STRCUT ($srt, 1, STRPOS($srt, " ") - 1 )
//--------------------------------
$srt = STRREPLACE ($srt, STRCONCAT($c, " "), "") // Отрезаем от строки переменную c и пробел
$d = STRCUT ($srt, 1, STRPOS($srt, " ") - 1 )
//--------------------------------
$srt = STRREPLACE ($srt, STRCONCAT($d, " "), "") // Отрезаем от строки переменную d и пробел
$e = STRCUT ($srt, 1, 100) // Количество символов переменной e неизвестно, предположим, что не больше 100
//-------------------------------- Выводим результаты в лог
PRINT( STRCONCAT("a = ", $a, " b = ", $b, " c = ", $c, " d = ", $d, " e = ", $e) )
INC($srt_n,1) // Переходим к следующей строке
END_CYC
Далее, можно перевести строковые переменные $a, $b, $c, $d и $e в числовые, если это необходимо по сценарию и с ними будут производиться какие то вычисления.
-
Oraven, aden спасибо за комментарии.
Atas Огромное спасибо за скрипт и подробные разъяснения. Забрать результаты у меня получилось.)
PS Был приятно удивлен, как работает STRFILTER ("str", "set", mode). Его работу представлял немного иначе, исходя из примеров в мануале. Мне казалось, что маска не посимвольная, что в первом варианте
print( strfilter("hello2000", "20", 0 ) ) // результат "hello"
кликермэн ищет в тексте "двадцать"... найдя "двадцать"... вырежет и "двадцать", и все символы, которые находятся после "двадцати".
во втором варианте
print( strfilter("hello2000", "20", 1 ) ) // результат "2000"
// результат "hello"
кликермэн ищет в тексте "двадцать"... найдя "двадцать"... оставит и "двадцать", и все символы, которые находятся после "двадцать".
А оказывается кликермэн ищет "двойки" и "нули". ;D