Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Получение и обработка информации из текстового файла

Ответить
Настройки темы
Получение и обработка информации из текстового файла

Ветеран


Автор проектов


Сообщения: 1575
Благодарности: 493


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: ya158
Дата: 10-09-2009
Есть текстовый файл. Каждая строка этого файла состоит из одного ил двух целых чисел, разделлённых табуляцией(или запятой, пробелом и т.д. - неважно). Разделитель известен заранее. То есть, например:

12345,2
67890,4
23456
34535,5

Если второго числа нет, то оно приравнивается к единице. Количество строк заранее не известно.

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

Так же было бы неплохо в начале этого текстового файла прописать несколько текстовых строк, которые в скрипте присвоились бы переменным. Например:

в текстовом файле
файл1.ехе
файл2.ехе
;Тут пустая строка
12345,2
67890,4
23456
34535,5

в скрипте следующая обработка
Х1=файл1.ехе
Х1=файл1.ехе
запуск Х1
запуск Х2
обработка массива строк из двух цифр

Помогите написать такой скрипт. Заранее спасибо.

-------
Объективная реальность есть бред, вызванный недостатком алкоголя в крови.
Оптимизм есть недостаток информации.
Хочу быть змеёй, чтобы на работу лёжа ходить.
Конструктор инсталляторов на основе 7z SFX + готовые инсталляторы


Отправлено: 20:39, 10-09-2009

 

Аватара для kaster

Старожил


Сообщения: 367
Благодарности: 91

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
$sPath = 'd:\1.txt';<--- Путь до текстового файла с числами
$sSep = '@TAB';<--- Разделитель, раскоментировать/дописать нужный, закоментировать остальные
;$sSep = ' '
;$sSep = ';'
;$sSep = ','
$sAppPath = 'c:\1.exe';<--- Путь до программы для запуска с ключами
$hFile = FileOpen($sPath, 0);<--- Открываем файл для чтения
$iIND = 1;<--- Индикатор выхода из цикла
While $iIND <> -1;<--- Цикл
    $sLine = FileReadLine($hFile);<--- Считываем файл строка за строкой
    $iIND = @error;<--- Проверяем не конец ли файла
    $aLine = StringSplit($sLine, $sSep);<--- Разделяем строку разделителем
    If $aLine[0] = 1 Then;<--- Проверка на наличие второго числа (отсутствие)
        $iParam1 = $aLine[1];<--- Первый параметр
        $iParam2 = 1;<--- Второй параметр
    Else;<--- Проверка на наличие второго числа (присутствие)
        $iParam1 = $aLine[1];<--- Первый параметр
        $iParam2 = $aLine[2];<--- Второй параметр
    EndIf
    RunWait(@ComSpec & ' /c "' & $sAppPath & '" ' & $iParam1 & ' ' & $iParam2);<--- Запуск программы с ключами.
WEnd
Честно говоря не понял про вторую часть.

-------
Русское сообщество пользователей AutoIt
autoit@conference.jabber.ru - Конференция на jabber.ru

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:56, 10-09-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Автор проектов


Сообщения: 1575
Благодарности: 493

Профиль | Отправить PM | Цитировать


kaster,
Огромное спасибо.

Вместо
Код: Выделить весь код
 RunWait(@ComSpec & ' /c "' & $sAppPath & '" ' & $iParam1 & ' ' & $iParam2)
вставил
Код: Выделить весь код
  MsgBox ( 0, $iIND, $iParam1 & $iParam2)
файл 1.txt содержит 4 строки. 4 сообщения выскочило ожидаемых, а затем выскочило пятое сообщение с заголовком "-1" (то есть iIND=-1) и текстом "1" (то есть, по видимому, либо iParam1=1, либо iParam2=1). То есть функция будет вызываться не 4 раза, а 5, причём пятый раз с ненужными параметрами. Или я в чём-то не прав?

Цитата kaster:
Честно говоря не понял про вторую часть. »
Файл d:\1.txt начинается со строк, содержащих имена файлов. Например: notepad.exe и d:\1.exe. Далее идёт пустая строка. А затем идут пары чисел:
Код: Выделить весь код
  
notepad.exe
d:\1.exe

12345,2
67890,4
23456
34535,5
Скрипт сначала из первой строки узнаёт имя первого файла (notepad.exe) и присваивает его какой-либо переменной (допустим Х1), затем узнаёт имя второго файла (d:\1.exe) и присваивает его следующей переменной (Х2). Таких имён файлов может быть несколько. Затем обнаруживается пустая строка и скрипт, например, запускает notepad.exe (узнаёт из переменной Х1) и присваивает sAppPath из твоего примера значение Х2 (то есть d:\1.exe). То есть выполняются каки-либо действия. После этого запускается твой скрипт и обрабатываются пары чисел.
Надеюсь сейчас объяснил более понятно.
Заранее спасибо за помощь

-------
Объективная реальность есть бред, вызванный недостатком алкоголя в крови.
Оптимизм есть недостаток информации.
Хочу быть змеёй, чтобы на работу лёжа ходить.
Конструктор инсталляторов на основе 7z SFX + готовые инсталляторы


Отправлено: 21:49, 10-09-2009 | #3


Аватара для kaster

Старожил


Сообщения: 367
Благодарности: 91

Профиль | Отправить PM | Цитировать


Цитата ya158:
То есть функция будет вызываться не 4 раза, а 5, причём пятый раз с ненужными параметрами. Или я в чём-то не прав? »
да. ты прав. я нет
у меня, к сожалению, часто такие ошибки проскакивают с +- 1 на цикле
вот правильный код
Код: Выделить весь код
$sPath = 'd:\1.txt';<--- Путь до текстового файла с числами
;$sSep = '@TAB';<--- Разделитель, раскоментировать/дописать нужный, закоментировать остальные
;$sSep = ' '
;$sSep = ';'
$sSep = ','
$sAppPath = 'c:\1.exe';<--- Путь до программы для запуска с ключами
$hFile = FileOpen($sPath, 0);<--- Открываем файл для чтения
$iIND = 1;<--- Индикатор выхода из цикла
While 1;<--- Цикл
    $sLine = FileReadLine($hFile);<--- Считываем файл строка за строкой
    $iIND = @error;<--- Проверяем не конец ли файла
    If $iIND = -1 Then ExitLoop;<--- Если конец, дальще не обратаываем файл
    $aLine = StringSplit($sLine, $sSep);<--- Разделяем строку разделителем
    If $aLine[0] = 1 Then;<--- Проверка на наличие второго числа (отсутствие)
        $iParam1 = $aLine[1];<--- Первый параметр
        $iParam2 = 1;<--- Второй параметр
    Else;<--- Проверка на наличие второго числа (присутствие)
        $iParam1 = $aLine[1];<--- Первый параметр
        $iParam2 = $aLine[2];<--- Второй параметр
    EndIf
    MsgBox ( 0, $iIND, 'iparam1 = ' & $iParam1 & @CRLF & 'iparam = ' & $iParam2)
    ;RunWait(@ComSpec & ' /c "' & $sAppPath & '" ' & $iParam1 & ' ' & $iParam2);<--- Запуск программы с ключами.
WEnd
Цитата ya158:
Так же было бы неплохо в начале этого текстового файла прописать несколько текстовых строк, которые в скрипте присвоились бы переменным. Например: »
Если это нужно делать до того как выполнится скрипт, то нужно открыть вначале файл для чтения, скопировать содержимое в другой файл или б.обмена, закрыть файл, снова открыть для записи с флагом перезаписи, записать нужные строки, добавить пустую строку, открыть другой файл, взять содержимое поместить снова в первый файл, закрыть второй файл, закрыть первый файл, открыть первый файл на чтения и провести вышеописанные манипуляции. если я правильно конечно понял.

-------
Русское сообщество пользователей AutoIt
autoit@conference.jabber.ru - Конференция на jabber.ru

Это сообщение посчитали полезным следующие участники:

Отправлено: 01:24, 11-09-2009 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Получение и обработка информации из текстового файла

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Сбор информации с сайта и ее обработка. Medic84 AutoIt 16 18-08-2010 12:08
Получение информации из нестандартных контроллов r35p3ct AutoIt 2 21-09-2009 09:54
CMD/BAT - [решено] Как скопировать имя файла из текстового файла в код батника и т.д. Nun-Nun Скриптовые языки администрирования Windows 6 13-05-2009 13:28
C/C++ - Открытие текстового файла .::.DIMA.::. Программирование и базы данных 4 05-05-2009 12:17
Обработка больших объемов информации ProcInf Программирование и базы данных 2 11-06-2007 13:10




 
Переход