Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Помогите с подсчётом сообщений (http://forum.oszone.net/showthread.php?t=141799)

Twix1124 03-06-2009 21:01 1134252

Помогите с подсчётом сообщений
 
Допустим имеется текстовый файл:

HTML код:

1 сообщение
5 сообщений
11 сообщений
4 сообщения
...

Как посчитать сумарное количество сообщений? В файле, конечно, имеется и другаю дребедень =)

SyDr 03-06-2009 23:00 1134376

Можно, к примеру, так:

Код:

#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)


Creat0R 03-06-2009 23:19 1134386

Или так (вроде надёжнее):

Код:

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)


Twix1124 04-06-2009 08:12 1134547

Sylver Dragon, что такое "$0"?
Creat0R, зачем нужна эта строчка "If $aFRead[$i] == "" Then ContinueLoop"? Нельзя её опустить?

SyDr 04-06-2009 08:35 1134562

Цитата:

Цитата Creat0R
Или так (вроде надёжнее): »

Надёжнее, надёжнее. У меня стоит дополнительная проверка. Чтобы строки, являющиеся полностью чсилами не ловил. Плюс, у меня будет ловить вещи типа: "А здесь у нас 1235 сообщений"
К тому же, проверил свой вариант. Что-то вообще нормально не работает :(
Цитата:

Цитата Twix1124
1)Sylver Dragon, что такое "$0"?
2)Creat0R, зачем нужна эта строчка "If $aFRead[$i] == "" Then ContinueLoop"? Нельзя её опустить? »

1. Это символ обозначет вернуть ранее найденную группу (в таких вот скобках). \d означает цифру. + означет, что она должна встретиться не менее одного раза.
2. Если строка пустая - продолжится выполнение цикла. То есть можно было написать If If $aFRead[$i] <> "" Then ... EndIf

Twix1124 04-06-2009 13:43 1134836

Sylver Dragon, брр=) Я только про $0 спросил=) Про regexp'ы я знаю=)
2. Так почему нельзя опустить "If $aFRead[$i] == "" Then ContinueLoop"???

Creat0R 04-06-2009 14:12 1134874

Цитата:

Цитата Twix1124
почему нельзя опустить "If $aFRead[$i] == "" Then ContinueLoop"? »

Можно опустить, но тогда будут делаться лишние вызовы StringRegExpReplace(). Эта проверка там для обхода символа возврата каретки (@CR), так как при делении содержимого файла я использовал @LF а не @CRLF, но правильнее делать так:

Код:

Global $aFRead = StringSplit(StringStripWS(StringStripCR(FileRead($sFilePath)), 3), @LF)


Время: 06:10.

Время: 06:10.
© OSzone.net 2001-