Автор Тема: Использование "If", "Then", "Else"  (Прочитано 13484 раз)

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

Оффлайн Mark [?]

  • Новичок
  • *
  • Сообщений: 22
  • Репутация: 1
    • Награды
Использование "If", "Then", "Else"
« Создано: Февраль 01, 2010, 22:15:16 »
Почему не работает такой кусок кода
Код: AutoIt [Выделить]
$file = FileOpen("sample.txt", 0)
$iYes = 0
$iNo = 0

While 1
    $line = FileReadLine($file)
     If @error = -1 Then ExitLoop
    $stringLeft = StringLeft( $line, 2)
     if $stringLeft = "Да" then $iYes = $iYes + 1 else $iNo = $iNo + 1
Wend

MsgBox(0, "Записей 'Да':", $iYes)
MsgBox(0, "Записей 'Нет':", $iNo)

FileClose($file)
 


Если выкинуть
Код: AutoIt [Выделить]
else $iNo = $iNo + 1

то работает, но естественно считает только первую переменную и чего компилятору не нравится сегмент else не пойму :wacko:
« Последнее редактирование: Февраль 01, 2010, 22:26:04 от Mark »

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

Использование "If", "Then", "Else"
« Отправлен: Февраль 01, 2010, 22:15:16 »

Оффлайн Garrett [?]

  • Глобальный модератор
  • *
  • Сообщений: 3989
  • Репутация: 960
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Использование "If", "Then", "Else"
« Ответ #1, Отправлен: Февраль 01, 2010, 22:43:09 »
Mark  [?]
Цитировать
и чего компилятору не нравится сегмент else не пойму
Синтаксис ему не нравится:

Код: AutoIt [Выделить]
; ...
While 1
    $line = FileReadLine($file)
     If @error = -1 Then ExitLoop
    $stringLeft = StringLeft( $line, 2)
    If $stringLeft = "Да" Then
         $iYes = $iYes + 1
    Else
         $iNo = $iNo + 1
    EndIf
Wend
; ...
 

Цитировать
If...Then  - Условное выполнение одиночного выражения.
Этот тип конструкции If используется для сокращения записи при условных выполнениях одиночных выражений и не требует указания EndIf.

Всё это есть в справке  ;)

Скорблю и помню.




Оффлайн killbond [?]

  • Осваивающий
  • **
  • Сообщений: 96
  • Репутация: 32
  • Пол: Мужской
    • Награды
Re: Использование "If", "Then", "Else"
« Ответ #2, Отправлен: Февраль 01, 2010, 22:47:57 »
  • Не закрыл условный оператор
  • Не ввел счетчик строк
  • Конструкции if ... else ... endif лучше писать в несколько строк (личный опыт)
  • Код не учитывает того, что первые 2 символа могут быть пробелами

Все это исправлено в этой версии:
Код: AutoIt [Выделить]
$file = FileOpen("sample.txt", 0)
$iYes = 0
$iNo = 0

$aValueOfStrings = StringSplit ( FileRead ( $file ), @CRLF)

For $iCounter = 1 to $aValueOfStrings [0]
    $line = FileReadLine($file, $iCounter)
        If @error = -1 Then ExitLoop
    $stringLeft = StringLeft( StringStripWS($line, 8), 2)
        if $stringLeft = "Да" then
            $iYes += 1
        else
            $iNo += 1
        EndIf
Next

MsgBox(0, "Записей 'Да':", $iYes)
MsgBox(0, "Записей 'Нет':", $iNo)

FileClose($file)

« Последнее редактирование: Февраль 01, 2010, 22:57:52 от killbond »
AutoIt - Может ВСЁ!
I will find my way, I will reach the end, I have enough forces!

Оффлайн Mark [?]

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

  • Автор темы
  • Репутация: 1
    • Награды
Re: Использование "If", "Then", "Else"
« Ответ #3, Отправлен: Февраль 01, 2010, 22:53:49 »
Спасибо.
Справку читал. С EndIf у меня тоже на работало, как оказалось из-за того, что я писал и Then и Else в одну строку  :D
Перепроверил только, что когда в строку ругается, когда раскидать по отдельным строчкам нормально.
Буду знать  :-[



PS
    * Не закрыл условный оператор
Это да...
    * Не ввел счетчик строк
Код: AutoIt [Выделить]
While 1
    $line = FileReadLine($file)
     If @error = -1 Then ExitLoop
....
Wend
 

Имхо, чем не счетчик?
    * Конструкции if ... else ... endif лучше писать в несколько строк (личный опыт)
Иначе, как оказалось и не работает  :D
    * Код не учитывает того, что первые 2 символа могут быть пробелами
Файл генерирует альтернативная программа, смысла вставлять такие проверки нет, так как пробелов там не может быть в принципе.
« Последнее редактирование: Февраль 01, 2010, 23:00:04 от Mark »

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

Re: Использование "If", "Then", "Else"
« Ответ #3 Отправлен: Февраль 01, 2010, 22:53:49 »

Оффлайн killbond [?]

  • Осваивающий
  • **
  • Сообщений: 96
  • Репутация: 32
  • Пол: Мужской
    • Награды
Re: Использование "If", "Then", "Else"
« Ответ #4, Отправлен: Февраль 01, 2010, 23:11:27 »
    * Не ввел счетчик строк
Код: AutoIt [Выделить]
While 1
    $line = FileReadLine($file)
     If @error = -1 Then ExitLoop
....
Wend
 

Имхо, чем не счетчик?

Тоже вариант... я и не думал, что такая вариация возможна, извини...  :-[ Но по мне, все-таки, привычней как я писал.

Оффлайн Mark [?]

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

  • Автор темы
  • Репутация: 1
    • Награды
Re: Использование "If", "Then", "Else"
« Ответ #5, Отправлен: Февраль 01, 2010, 23:16:15 »
Тоже вариант... я и не думал, что такая вариация возможна, извини...  :-[ Но по мне, все-таки, привычней как я писал.

Твой подсчет хуже тем, что для определения количества строк делается отдельный проход файла. Это не критично при маленьких файлах, а мне тут придется текстовые файлы минимум по 20-30 метров (50000+ строк) парсить, каждый лишний проход это время  :)

Те в идеале, кучей этих Else, ElseIf я хочу пропарсить за один проход эту громадину.

Оффлайн Garrett [?]

  • Глобальный модератор
  • *
  • Сообщений: 3989
  • Репутация: 960
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Использование "If", "Then", "Else"
« Ответ #6, Отправлен: Февраль 01, 2010, 23:18:32 »
Mark  [?]
Цитировать
    * Конструкции if ... else ... endif лучше писать в несколько строк (личный опыт)
Иначе, как оказалось и не работает
А что, раньше работало?   :)
Не как оказалось, а потому что у вас второй IF не: " Условное выполнение одиночного выражения " и требуется Else следовательно у вас конструкция IF ... Then ... Else ... EndIf а её в сокращённой форме писать нельзя, требуется перенос на новую строку.

Оффлайн Mark [?]

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

  • Автор темы
  • Репутация: 1
    • Награды
Re: Использование "If", "Then", "Else"
« Ответ #7, Отправлен: Февраль 01, 2010, 23:25:33 »
Mark  [?]
Цитировать
    * Конструкции if ... else ... endif лучше писать в несколько строк (личный опыт)
Иначе, как оказалось и не работает
А что, раньше работало?   :)
Не как оказалось, а потому что у вас второй IF не: " Условное выполнение одиночного выражения " и требуется Else следовательно у вас конструкция IF ... Then ... Else ... EndIf а её в сокращённой форме писать нельзя, требуется перенос на новую строку.

А теперь посмотрим название раздела.
"Для новичков" - лично мне не было понятно, что писать нужно обязательно на разных строках. Так как пользуюсь If... Else второй раз и ни разу не использовал вот таких вот каскадных условных выборок. Теперь понятно. Спасибо, помогли  :beer:

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

Re: Использование "If", "Then", "Else"
« Ответ #7 Отправлен: Февраль 01, 2010, 23:25:33 »

Оффлайн killbond [?]

  • Осваивающий
  • **
  • Сообщений: 96
  • Репутация: 32
  • Пол: Мужской
    • Награды
Re: Использование "If", "Then", "Else"
« Ответ #8, Отправлен: Февраль 01, 2010, 23:29:39 »
Mark  [?]
Цитировать
    * Конструкции if ... else ... endif лучше писать в несколько строк (личный опыт)
Иначе, как оказалось и не работает
А что, раньше работало?   :)
Не как оказалось, а потому что у вас второй IF не: " Условное выполнение одиночного выражения " и требуется Else следовательно у вас конструкция IF ... Then ... Else ... EndIf а её в сокращённой форме писать нельзя, требуется перенос на новую строку.

Хм... мне это говорит о том, что я невнимательно читаю хелп, за эту заметку вам спасибо.
« Последнее редактирование: Февраль 02, 2010, 00:03:17 от killbond »

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379
  • Репутация: 2694
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: Использование "If", "Then", "Else"
« Ответ #9, Отправлен: Февраль 01, 2010, 23:30:24 »
Кстати, вопреки логике, многострочные конструкции в AutoIt выполняются быстрее ~35% (по крайней мере на моей машине).

Код: AutoIt [Выделить]
$Timer = TimerInit()
$Count = 0
For $i = 1 To 500000
    If $i > 0 Then $Count += 1
Next
ConsoleWrite(TimerDiff($Timer) & @CR)

$Timer = TimerInit()
$Count = 0
For $i = 1 To 500000
    If $i > 0 Then
        $Count += 1
    EndIf
Next
ConsoleWrite(TimerDiff($Timer) & @CR)



Думай, прежде чем говорить.

Оффлайн Garrett [?]

  • Глобальный модератор
  • *
  • Сообщений: 3989
  • Репутация: 960
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Использование \"If\", \"Then\", \"Else\"
« Ответ #10, Отправлен: Февраль 02, 2010, 00:09:54 »
Ха! На самом деле!
Выходит что сокращённая форма записи для IF, сокращает только количество строк в коде, в ущерб скорости.
Интересно с чем это связано?


Добавлено: Февраль 02, 2010, 00:18:01
Mark
Ничего личного.
Просто я заметил, что вы не поняли до конца всей сути, вот и акцентировал ваше внимание.  ;)

killbond
Не за что. Рад помочь.
« Последнее редактирование: Февраль 02, 2010, 00:25:54 от Garrett, Причина: Объединение сообщений »

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7809
  • Репутация: 2281
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Re: Использование \"If\", \"Then\", \"Else\"
« Ответ #11, Отправлен: Февраль 02, 2010, 00:18:31 »
killbond  [?]
Цитировать
я и не думал, что такая вариация возможна
Значит срочно в справку, там много есть чего многие не знали :laugh:


Добавлено: Февраль 02, 2010, 00:21:07
OffTopicYashied  [?]
Цитировать
многострочные конструкции в AutoIt выполняются быстрее
Где то мы с тобой это уже обсуждали, только немогу найти где...


Правила, Поиск, Супер тема


AutoIt is simple, subtle, elegant.


«Не оказываю тех. поддержку через ПМ/ICQ, и по электронной почте - для этого есть форум. (C)»
«Законы Мэрфи неоспоримы!»


Мои работы

Оффлайн SyDr [?]

  • Модератор
  • *
  • Сообщений: 649
  • Репутация: 157
  • Пол: Мужской
  • Сидра
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Использование "If", "Then", "Else"
« Ответ #12, Отправлен: Февраль 02, 2010, 08:15:01 »
Yashied  [?]
Цитировать
Кстати, вопреки логике, многострочные конструкции в AutoIt выполняются быстрее ~35% (по крайней мере на моей машине).
Ну ведь не обязательно вопреки логике. Язык ведь интерпретируемый. Получается, что во время выполнения проще обработать три простых строки, чем одну сложную.

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379
  • Репутация: 2694
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: Использование "If", "Then", "Else"
« Ответ #13, Отправлен: Февраль 02, 2010, 08:19:07 »
Скорее всего так оно и есть. Лично я никогда не писал и не пишу в одну строку.

Оффлайн akoulev [?]

  • Новичок
  • *
  • Сообщений: 163
  • Репутация: 2
    • Награды
Re: Использование "If", "Then", "Else"
« Ответ #14, Отправлен: Февраль 15, 2010, 11:29:38 »
...во время выполнения проще обработать три простых строки, чем одну сложную.
Это - человеческая логика. А "бездушный автомат" ;) или:
- выполняет три строки;
  или же
- сперва преобразует длинную строку во всё те же самые три строки (на что требуется время, время преобразования), после чего - выполняет оные три строки.
По-моему, так. (с) Милн.
C уважением, Андрей.

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

Re: Использование "If", "Then", "Else"
« Ответ #14 Отправлен: Февраль 15, 2010, 11:29:38 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
13 Ответов
9117 Просмотров
Последний ответ Октябрь 02, 2009, 15:02:09
от CreatoR
6 Ответов
11796 Просмотров
Последний ответ Октябрь 07, 2009, 09:36:42
от akoulev
12 Ответов
11389 Просмотров
Последний ответ Декабрь 01, 2012, 02:05:11
от defens
6 Ответов
4885 Просмотров
Последний ответ Ноябрь 25, 2009, 10:57:54
от oneDmitry
14 Ответов
11950 Просмотров
Последний ответ Февраль 13, 2010, 22:44:00
от akoulev
14 Ответов
7089 Просмотров
Последний ответ Декабрь 11, 2009, 22:24:16
от Medic84
4 Ответов
3810 Просмотров
Последний ответ Декабрь 08, 2009, 09:24:06
от Suppir
1 Ответов
3034 Просмотров
Последний ответ Декабрь 24, 2009, 14:08:40
от Yashied
2 Ответов
4700 Просмотров
Последний ответ Декабрь 25, 2009, 13:05:11
от Suppir
10 Ответов
6993 Просмотров
Последний ответ Январь 11, 2010, 02:31:58
от Yashied