|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Обработка файла с помощью AutoIT |
|
Обработка файла с помощью AutoIT
|
Новый участник Сообщения: 49 |
Доброго времени суток уважаемые!!!
не подскажете как удобнее всего реализовать следующее: есть файл csv в котором есть данные разделенные запятыми. Так вот мне необходимо суммировать некоторые данные по строкам. приведу пример исходного файла: 07.06.2011 8:01 62.80.230.41 ХХХ.ХХХ.ХХХ.ХХХ TCP 3389 1875 0,022325 10 07.06.2011 8:01 81.23.3.110 ХХХ.ХХХ.ХХХ.ХХХ TCP 3389 1987 0,022293 10 так вот хотелось бы в итоге получить итоговый файл в котором отображалось бы сумма столбца 8 соответствующая 3 столбцу т.е. простыми словами суммировать по строкам. Трудность в том что в файле около 230 000 строк - и использовать эксель с макросами немного затруднительно. |
|
Отправлено: 11:06, 28-06-2011 |
Ветеран Сообщения: 812
|
Профиль | Отправить PM | Цитировать Space-06,
Т.е. сумма (0,022325 и т.п.) должна быть подсчитана отдельно для всех вхождений 62.80.230.41, потом для всех 81.23.3.110, ..., и.т.д. Я правильно понял? |
Отправлено: 11:30, 28-06-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Space-06, быстрее всего (для счёта, не для времени разработки, понятно) будет использование подобной технологии: vbscript: работа с большими текстовыми файлами.
P.S. Вопрос, собственно, упирается в следующее: допустимо ли использование статистических функций в текстовом провайдере OLEDB?! Я сие не выяснял. |
Последний раз редактировалось Iska, 28-06-2011 в 12:20. Отправлено: 12:15, 28-06-2011 | #3 |
Новый участник Сообщения: 49
|
Профиль | Отправить PM | Цитировать Цитата madmasles:
Цитата Iska:
|
||
Отправлено: 19:14, 28-06-2011 | #4 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Space-06, тогда хотелось бы увидеть реальный пример:
Цитата Space-06:
Предположим, что файл — CSV (хорошо бы ещё, для чистоты, иметь текстовые поля заключёнными в кавычки, а так придётся, как минимум, сделать десятичным разделителем точку), например, такого вида: Source.txt 07.06.2011 8:01, 62.80.230.41, еее.еее.еее.еее, TCP, 3389, 1875, 0.022325, 10 07.06.2011 8:03, 62.80.230.41, еее.еее.еее.еее, TCP, 3389, 1875, 0.05, 10 07.06.2011 8:01, 81.23.3.110, еее.еее.еее.еее, TCP, 3389, 1987, 0.022293, 10 08.06.2011 9:02, 81.23.3.110, еее.еее.еее.еее, TCP, 3389, 1987, 0.06, 10 А само приложение — наподобие: где: — путь к текстовому файлу «Source.txt» и лежащему рядом с ним «Schema.ini». Результат работы скрипта: Цитата Space-06:
|
|||
Отправлено: 02:35, 29-06-2011 | #5 |
Старожил Сообщения: 254
|
Профиль | Отправить PM | Цитировать Space-06, изучай
; #include <Array.au3> ; для _ArrayDisplay $text = FileRead(@ScriptDir&'\список.txt') If StringInStr($text, @LF) Then $aText=StringSplit(StringStripCR(StringStripWS($text, 7)), @LF) ; делим данные построчно в массив, удалив симовол @CR и повтор пробела Else $aText=StringSplit(StringStripWS($text, 7), @CR) EndIf Global $aTable[$aText[0]+1][9] ; создаём новый массив с 9-ю колонками $aTable[0][0]=$aText[0] ; заполняем массив 9-ти колоночный, раздробив строку на колонки по пробелам For $i = 1 to $aText[0] $aTmp=StringSplit($aText[$i], ' ') For $j = 1 to $aTmp[0] $aTable[$i][$j-1]=$aTmp[$j] Next Next $aOut=_Calculate($aTable) ; функция подсчёта ; _ArrayDisplay($aOut, 'aOut') $Out='' For $i = 1 to $aOut[0][0] ; объединение массива в многострочный текст $aOut[$i][0]&=@TAB&$aOut[$i][1] $Out&=$aOut[$i][0]&@CRLF Next $file = FileOpen(@ScriptDir&'\новый список.txt',2) ; записываем в файл FileWrite($file, $Out) FileClose($file) Func _Calculate($a) Local $k, $ind, $i If Not IsArray($a) Or UBound($a)<2 Then SetError(1, 0, 'проблема массива') ; проверка валидности массива $ind='_//' ; индекс для непересечения с переменными функции Assign($ind, 2, 1) $k=0 For $i = 1 To $a[0][0] If Not IsDeclared($a[$i][2]&$ind) Then $k+=1 $a[$k][0]=$a[$i][2] EndIf Assign($a[$i][2]&$ind, Eval($a[$i][2]&$ind)+StringReplace($a[$i][7], ',', '.'), 1) ; создаём локальные переменные или увеличиваем значение для уже созданных Next If $k = 0 Then Return SetError(1, 0, 'проблема массива') ReDim $a[$k+1][2] For $i = 1 to $k $a[$i][1]=Eval($a[$i][0]&$ind) Next $a[0][0]=$k Return $a EndFunc |
Последний раз редактировалось AZJIO, 29-06-2011 в 05:07. Отправлено: 04:40, 29-06-2011 | #6 |
Новый участник Сообщения: 49
|
Профиль | Отправить PM | Цитировать Iska, а схема какая должна быть для csv?
[Source.csv] ColNameHeader=False Format=CSVDelimited TextDelimiter=none CharacterSet=ANSI Col1=DateTime Date Col2=IPAddress char Col3=Name char Col4=Protocol char Col5=Port Integer Col6=SomeField1 Integer Col7=Cost Float Col8=SomeField2 Integer IPAddress и TotalCost |
Отправлено: 07:41, 30-06-2011 | #7 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Space-06:
Цитата Space-06:
$oRecordSet.Open("SELECT " & _ "FIRST([DateTime]) AS [FDateTime], " & _ "LAST([DateTime]) AS [LDateTime], " & _ "[IPAddress], " & _ "COUNT(*) AS [Count], " & _ "FIRST([Name]) AS [FName], " & _ "SUM([Cost]) AS [TotalCost] " & _ "FROM [" & "Source.txt" & "] " & _ "GROUP BY [IPAddress] ", _ "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "E:\Песочница\0058" & ";Extended Properties=""text;""", _ $adOpenStatic, $adLockOptimistic, $adCmdText) |
||
Отправлено: 12:45, 30-06-2011 | #8 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Запись дисков с помощью AutoIt | TERMINAL | AutoIt | 2 | 29-10-2010 05:44 | |
Обработка изображений с помощью GIMP для чайника | safetyinfo | Цифровое изображение | 1 | 28-05-2010 23:00 | |
Возможна ли линковка 2-х программ с помощью autoit?? | Uxtbl | AutoIt | 11 | 29-07-2009 15:51 | |
[решено] Aвторизация на сайте с помощью AutoIt | Yandex | AutoIt | 6 | 14-04-2009 20:08 | |
Обработка лог-файла на C++ | Guest | Программирование и базы данных | 17 | 23-03-2004 01:11 |
|