Перейти к содержимому

Фотография

Проход по текстовому файлу


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 10

#1 Roy

Roy

    Новый участник

  • Members
  • Pip
  • 19 сообщений
  • ФИО:Roy Obenon
  • Город:Москва

Отправлено 18 февраля 2015 - 10:31

Добрый день!

 

Есть ли метод для перебора слов в txt файле и сравнение с заданным выражением?   


  • 0

#2 aksas

aksas

    Активный участник

  • Members
  • PipPip
  • 130 сообщений
  • Город:Харьков

Отправлено 18 февраля 2015 - 10:44

работа с файлами http://support.smart...warticle/60211/

для выделения слов можно регулярки http://support.smart...warticle/55518/


  • 1

#3 modbear

modbear

    Специалист

  • Members
  • PipPipPipPipPip
  • 548 сообщений

Отправлено 18 февраля 2015 - 12:01

Найти текст в файле:

// JScript
var strFileName = "C:\\MyFile.txt";
var strText = "lorem ipsum";

var strFileContents = aqFile.ReadWholeTextFile(strFileName, aqFile.ctANSI);
if (aqString.Find(strFileContents, strText, 0, false /* игнорируем регистр букв */) >= 0)
  // нашли
else
  // не нашли

Найти regex в файле:

// JScript
var strFileName = "C:\\MyFile.txt";
var strRegex = "\\d+"; // Вместо \d пишем \\d, потому что здесь не regex literal, а строка; а в JS-строках слеши надо дублировать

var strFileContents = aqFile.ReadWholeTextFile(strFileName, aqFile.ctANSI);
if (aqString.StrMatches(strRegex, strFileContents))
  // нашли
else
  // не нашли

  • 1

#4 Roy

Roy

    Новый участник

  • Members
  • Pip
  • 19 сообщений
  • ФИО:Roy Obenon
  • Город:Москва

Отправлено 18 февраля 2015 - 12:36

я вот так делаю и вылетает ошибка: Не соответствие типа

 


function TestService() {
  
  TestedApps["cmd"]["Run"]();
  Aliases["cmd"]["wndConsoleWindowClass"]["Keys"]("net start>D:\\srv.txt[Enter]");
  var filename, strtext;
  strText = "Service";
  filename = aqFile.OpenTextFile("D:\\srv.txt", aqFile.faRead, aqFile.ctANSI);
  while (!filename["IsEndOfFile"]())
    if (aqString["Find"](filename, strtext,0,false))
  Log["Message"]("Service is enabled")
} 


  • 0

#5 Rebz

Rebz

    Опытный участник

  • Members
  • PipPipPipPip
  • 471 сообщений


Отправлено 18 февраля 2015 - 12:52

на какой строчке несоответствие типа?

обычно эта ошибка возникает, когда мы работаем с массивом как с обычной строкой, например.


  • 1

#6 Roy

Roy

    Новый участник

  • Members
  • Pip
  • 19 сообщений
  • ФИО:Roy Obenon
  • Город:Москва

Отправлено 18 февраля 2015 - 13:01

if (aqString.Find(strFileContents, strText, 0, false /* игнорируем регистр букв */) >= 0)  здесь >=0 это подразумивает что найденное выражение должно быть >=0?


  • 0

#7 Roy

Roy

    Новый участник

  • Members
  • Pip
  • 19 сообщений
  • ФИО:Roy Obenon
  • Город:Москва

Отправлено 18 февраля 2015 - 13:13

Я вот так решил, плюс сделал проверку на выбор 2 сервисов

 

function TestService() {
  var file = "D:\\srv.txt";
  var string = "Service";
   var string2 = "Service2";
  TestedApps["cmd"]["Run"]();
  Aliases["cmd"]["wndConsoleWindowClass"]["Keys"]("net start>D:\\srv.txt[Enter]");
  var s = aqFile.ReadWholeTextFile(file, aqFile.ctANSI)
 if (aqString.Find(s, string | string2, 0, false) >= 0)
  Log["Message"]("Find");
else
  Log["Message"]("Empty");
  TestedApps["cmd"]["Close"]();
}

Всем спасибо за помощь!


  • 0

#8 modbear

modbear

    Специалист

  • Members
  • PipPipPipPipPip
  • 548 сообщений

Отправлено 18 февраля 2015 - 13:28

Вы бы лучше сразу сказали, что надо проверить статус сервиса. В TestComplete для этого есть встроенный метод WMI.GetServiceState:

if (WMI.GetServiceState("Themes") == "Running")
  // запущен
else
  // не запущен

  • 0

#9 Roy

Roy

    Новый участник

  • Members
  • Pip
  • 19 сообщений
  • ФИО:Roy Obenon
  • Город:Москва

Отправлено 18 февраля 2015 - 13:39

Спасибо! Но тот метод мне тоже пригодиться, мне нужно делать вычитку из лога - "типа успешно запущена служба или нет" 


  • 0

#10 modbear

modbear

    Специалист

  • Members
  • PipPipPipPipPip
  • 548 сообщений

Отправлено 18 февраля 2015 - 15:08

Кстати:

if (aqString.Find(s, string | string2, 0, false) >= 0)

"string | string2" не будет работать; bitwise OR для строк не имеет смысла.

Если надо найти несколько строк, надо делать Find несколько раз:

if (aqString.Find(s, string, 0, false) >= 0) ...

if (aqString.Find(s, string2, 0, false) >= 0) ...

  • 0

#11 Roy

Roy

    Новый участник

  • Members
  • Pip
  • 19 сообщений
  • ФИО:Roy Obenon
  • Город:Москва

Отправлено 19 февраля 2015 - 06:04

Принял! благодарю за подсказку


  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных