Автор Тема: [Автоматизация] Перебор строк в списке файлов  (Прочитано 156 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн VladVN [?]

  • Новичок
  • *
  • Сообщений: 2
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Здравствуйте. У меня есть список путей к файлам в формате txt.Вида:
(нажмите для показа/скрытия)

Нужно выполнить построчный перебор каждого файла в списке (файлы тоже txt), но, с условиями. Что нужно сделать:
1. Найти поле "From"
2. Начать построчную запись в ячейку excel
3. Найти поле "To:"
4. Продолжить построчную вставку в следующую ячейку таблицы.
5. След условие и тд.
6. Достигнув конца файла, начать следующий по порядку.
Вот мои наработки.
Скрипт работает по другому принципу, хотел сначала все загнать в txt файл с разделителями, потом импортом утащить в Excel, не дошел даже до этого.

(нажмите для показа/скрытия)

Пример текста для распарсивания:

(нажмите для показа/скрытия)
Все они устроены одинаково, но основная проблема в том, что в некоторый файлах есть несколько адресов и тогда скрипт не работает. Например:
(нажмите для показа/скрытия)

Надеюсь на помощь, образование экономическое, в программировании не шарю.

Русское сообщество AutoIt

[Автоматизация] Перебор строк в списке файлов
« Отправлен: Февраль 14, 2018, 12:57:39 »

Оффлайн hedji [?]

  • Осваивающий
  • **
  • Сообщений: 199
  • Репутация: 30
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Полученный файл output.txt можно скопипастить в Excel с разделителем точка с запятой.

Код: AutoIt [Выделить]
#include <File.au3>
Global $filelist[0]
_FileReadToArray(@ScriptDir & "\files.txt", $filelist)
For $i=1 To $filelist[0]
    Local $currentfile[0]
    _FileReadToArray($filelist[$i], $currentfile)
    $str_exp=""
    For $x=1 To $currentfile[0]
        Select
            Case StringInStr($currentfile[$x], "From: ")
                $str_exp=$str_exp & StringReplace($currentfile[$x], "From: ", "") & ";"
            Case StringInStr($currentfile[$x], "     To: ")
                $str_exp=$str_exp & StringReplace($currentfile[$x], "     To: ", "") & ";"
            Case StringInStr($currentfile[$x], "   Date: ")
                $str_exp=$str_exp & StringReplace($currentfile[$x], "   Date: ", "") & ";"
            Case StringInStr($currentfile[$x], "Subject: ")
                $str_exp=$str_exp & StringReplace($currentfile[$x], "Subject: ", "")
        EndSelect
    Next
    FileWriteLine(@ScriptDir & "\output.txt", $str_exp)
Next
 


UPD: чтобы не составлять список файлов руками:
Код: AutoIt [Выделить]
« Последнее редактирование: Февраль 14, 2018, 17:46:30 от hedji »

Оффлайн VladVN [?]

  • Новичок
  • *
  • Сообщений: 2

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Благодарю,все работает, единственное, если адресов получателей несколько, берет только первый. Можете подсказать, что тут можно придумать?

Оффлайн Tempo [?]

  • Продвинутый
  • ***
  • Сообщений: 247
  • Репутация: 59
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Код: AutoIt [Выделить]
#include <MsgBoxConstants.au3>
#include <StringConstants.au3>
#include <Excel.au3>

_Example()

Func _Example()
    Local $aFileList = FileReadToArray("FileList.txt"), $iUBound = @extended
    If @error Then Exit _Error("Не удалось получить список файлов")

    Local $aOut[$iUBound][6], $sData, $aRegExp, $aSplit, $iStrip = $STR_STRIPLEADING + $STR_STRIPTRAILING
    Local $oExcel = _Excel_Open(False)
    If @error Then _Error("_Excel_Open: " & @error)
    Local $oWorkbook = _Excel_BookNew($oExcel)
    If @error Then _Error("_Excel_BookNew: " & @error)

    For $i = 0 To $iUBound - 1
        $sData = FileRead($aFileList[$i])

        $aRegExp = StringRegExp($sData, "From:(.*)", 1)
        If Not @error Then $aOut[$i][0] = StringStripWS($aRegExp[0], $iStrip)
        $aRegExp = StringRegExp($sData, "Date:(.*)", 1)
        If Not @error Then $aOut[$i][2] = StringStripWS($aRegExp[0], $iStrip)
        $aRegExp = StringRegExp($sData, "Subject:(.*)", 1)
        If Not @error Then $aOut[$i][3] = StringStripWS($aRegExp[0], $iStrip)
        $aRegExp = StringRegExp($sData, "Attachments:(.*)", 1)
        If Not @error Then $aOut[$i][4] = StringStripWS($aRegExp[0], $iStrip)
        $aRegExp = StringRegExp($sData, "------------------------------------------------\R((?s).*)", 1)
        If Not @error Then $aOut[$i][5] = StringStripWS($aRegExp[0], $iStrip)

        $aRegExp = StringRegExp($sData, "To:((?s).*?)\R.*?Date:", 1)
        If Not @error Then
            $aSplit = StringSplit(StringStripWS(StringStripCR($aRegExp[0]), $iStrip), @LF)
            For $j = 1 To $aSplit[0]
                $aOut[$i][1] &= StringStripWS($aSplit[$j], $iStrip) & @CRLF
            Next
            $aOut[$i][1] = StringTrimRight($aOut[$i][1], 2)
        EndIf
    Next

    _Excel_RangeWrite($oWorkbook, Default, $aOut)
    With $oWorkbook.ActiveSheet
        .Rows.AutoFit
        .Columns.AutoFit
    EndWith
    _Excel_BookSaveAs($oWorkbook, @ScriptDir & "\Out.xls", $xlExcel8, True)
    _Excel_Close($oExcel)
EndFunc   ;==>_Example

Func _Error($sText)
    Exit MsgBox($MB_ICONERROR + $MB_TOPMOST, "Ошибка", $sText)
EndFunc   ;==>_Error

« Последнее редактирование: Февраль 15, 2018, 16:59:42 от Tempo »

Русское сообщество AutoIt

Re: [Автоматизация] Перебор строк в списке файлов
« Ответ #3 Отправлен: Февраль 15, 2018, 15:22:06 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
1 Ответов
1859 Просмотров
Последний ответ Июнь 28, 2012, 20:26:59
от madmasles
2 Ответов
1658 Просмотров
Последний ответ Февраль 28, 2013, 17:38:11
от Trans
1 Ответов
2424 Просмотров
Последний ответ Май 09, 2013, 09:32:12
от madmasles
3 Ответов
2190 Просмотров
Последний ответ Сентябрь 05, 2013, 23:48:34
от PACHOM
8 Ответов
2804 Просмотров
Последний ответ Март 31, 2014, 17:57:22
от AZJIO
10 Ответов
2843 Просмотров
Последний ответ Декабрь 07, 2014, 01:55:24
от Fanatmb
3 Ответов
1231 Просмотров
Последний ответ Июль 05, 2015, 14:20:54
от alex33
4 Ответов
1499 Просмотров
Последний ответ Декабрь 15, 2015, 09:23:33
от serg41
0 Ответов
477 Просмотров
Последний ответ Февраль 28, 2017, 18:30:40
от [email protected]
2 Ответов
207 Просмотров
Последний ответ Февраль 04, 2018, 22:59:27
от Василиса Лукьянчикова