-
AutoIt
(
http://forum.oszone.net/forumdisplay.php?f=103)
Помогите с подсчётом сообщений
Допустим имеется текстовый файл:
HTML код:
1 сообщение
5 сообщений
11 сообщений
4 сообщения
...
Как посчитать сумарное количество сообщений? В файле, конечно, имеется и другаю дребедень =)
|
Можно, к примеру, так:
Код:
#include <File.au3>
Global $F[1]
Global $FilePath = "List.txt"
Global $Sum = 0
_FileReadToArray($FilePath, $F)
For $I = 1 To $F[0]
If NOt(IsInt($F[$I])) Then $Sum += StringRegExpReplace($F[$I], '(\d+)\sсообщени', "$0")
Next
MsgBox(4096, "Готово", "Общее чиcло сообщений:" & @CRLF & $Sum)
|
Или так (вроде надёжнее):
Код:
Global $sFilePath = "List.txt"
Global $iCount = 0
Global $aFRead = StringSplit(FileRead($sFilePath), @LF)
For $i = 1 To $aFRead[0]
If $aFRead[$i] == "" Then ContinueLoop
$iC = StringRegExpReplace($aFRead[$i], '(?i)\A(\d+)\sсообщен', '\1')
If @extended > 0 Then $iCount += Int($iC)
Next
MsgBox(4096, "Готово", "Общее чиcло сообщений:" & @CRLF & $iCount)
|
Sylver Dragon, что такое "$0"?
Creat0R, зачем нужна эта строчка "If $aFRead[$i] == "" Then ContinueLoop"? Нельзя её опустить?
|
Цитата:
Цитата Creat0R
Или так (вроде надёжнее): »
|
Надёжнее, надёжнее. У меня стоит дополнительная проверка. Чтобы строки, являющиеся полностью чсилами не ловил. Плюс, у меня будет ловить вещи типа: "А здесь у нас 1235 сообщений"
К тому же, проверил свой вариант. Что-то вообще нормально не работает :(
Цитата:
Цитата Twix1124
1)Sylver Dragon, что такое "$0"?
2)Creat0R, зачем нужна эта строчка "If $aFRead[$i] == "" Then ContinueLoop"? Нельзя её опустить? »
|
1. Это символ обозначет вернуть ранее найденную группу (в таких вот скобках). \d означает цифру. + означет, что она должна встретиться не менее одного раза.
2. Если строка пустая - продолжится выполнение цикла. То есть можно было написать If If $aFRead[$i] <> "" Then ... EndIf
|
Sylver Dragon, брр=) Я только про $0 спросил=) Про regexp'ы я знаю=)
2. Так почему нельзя опустить "If $aFRead[$i] == "" Then ContinueLoop"???
|
Цитата:
Цитата Twix1124
почему нельзя опустить "If $aFRead[$i] == "" Then ContinueLoop"? »
|
Можно опустить, но тогда будут делаться лишние вызовы StringRegExpReplace(). Эта проверка там для обхода символа возврата каретки (@CR), так как при делении содержимого файла я использовал @LF а не @CRLF, но правильнее делать так:
Код:
Global $aFRead = StringSplit(StringStripWS(StringStripCR(FileRead($sFilePath)), 3), @LF)
|
Время: 06:10.
© OSzone.net 2001-