Помогите с подсчётом сообщений

Ответить
Аватара пользователя
Twix1124

Помогите с подсчётом сообщений

Сообщение Twix1124 »

Допустим имеется текстовый файл:





HTML код:

Код: Выделить всё

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



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

Re: Помогите с подсчётом сообщений

Сообщение SyDr »

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





Код:

Код: Выделить всё

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

Re: Помогите с подсчётом сообщений

Сообщение Creat0R »

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





Код:

Код: Выделить всё

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

Re: Помогите с подсчётом сообщений

Сообщение Twix1124 »

Sylver Dragon, что такое "$0"?

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

Re: Помогите с подсчётом сообщений

Сообщение SyDr »

Цитата Creat0R:



Или так (вроде надёжнее):
Помогите с подсчётом сообщений




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

К тому же, проверил свой вариант. Что-то вообще нормально не работает Изображение


Цитата Twix1124:



1)Sylver Dragon, что такое "$0"?

2)Creat0R, зачем нужна эта строчка "If $aFRead[$i] == "" Then ContinueLoop"? Нельзя её опустить?
Помогите с подсчётом сообщений




1. Это символ обозначет вернуть ранее найденную группу (в таких вот скобках). \d означает цифру. + означет, что она должна встретиться не менее одного раза.

2. Если строка пустая - продолжится выполнение цикла. То есть можно было написать If If $aFRead[$i] "" Then ... EndIf
Аватара пользователя
Twix1124

Re: Помогите с подсчётом сообщений

Сообщение Twix1124 »

Sylver Dragon, бррИзображение Я только про $0 спросилИзображение Про regexp'ы я знаюИзображение

2. Так почему нельзя опустить "If $aFRead[$i] == "" Then ContinueLoop"???
Аватара пользователя
Creat0R

Re: Помогите с подсчётом сообщений

Сообщение Creat0R »

Цитата Twix1124:



почему нельзя опустить "If $aFRead[$i] == "" Then ContinueLoop"?
Помогите с подсчётом сообщений




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





Код:

Код: Выделить всё

Global $aFRead = StringSplit(StringStripWS(StringStripCR(FileRead($sFilePath)), 3), @LF)
Ответить

Вернуться в «AutoIt»