Что нового

Особенности использования функции Select

Orus

Чайник
Сообщения
41
Репутация
1
Доброго времени суток.
Возникла проблема с использованием функции Select, возможно есть какие-либо нюансы...

Код:
#include <File.au3>

$var = DriveGetDrive("REMOVABLE")
If Not @error Then
	$aFolder=_FileListToArray($var[2],"*",2)
	if $aFolder[0] <> 0 Then
		For $i=0 to $aFolder[0]
			StringLower($aFolder[$i])
			$spc = StringLeft($aFolder[$i], 4)
			Select
				Case $spc = "powt"
					MsgBox(4096,"",$aFolder[$i])
					Exit
				Case Else
					MsgBox(4096,"","Common")
					Exit
			EndSelect
		Next
	EndIf
EndIf

данный вариант выдает всегда "Common"(использовал ф-ию Select как в примере в мануале)

Код:
#include <File.au3>
$j=0
$var = DriveGetDrive("REMoVABLE")
If Not @error Then
	$aFolder=_FileListToArray($var[2],"*",2)
	if $aFolder[0] <> 0 Then
		For $i=0 to $aFolder[0]
			StringLower($aFolder[$i])
			$spc = StringLeft($aFolder[$i], 4)
			if $spc = "powt" Then
				MsgBox(4096,"",$aFolder[$i])
				Exit
			Else
				$j=$j+1
			EndIf
		Next
		If $j<>0 Then
			MsgBox(4096,"","Common")
		EndIf
		
	EndIf
EndIf

а данный вариант, сделаный побыстрому, выдает все правильно, хотя по идее должны работать одинаково
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
Re: использование Select

Предупреждение
Название темы не соотвествует правилам. Переименуй

По теме, для сравнения строковых выражения заданным, рекомендую использовать StringCompare()
 

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
Re: использование Select

Orus
Можно использовать либо Switch:
Код:
Switch $spc
  Case "powt"
    ...
  Case "bngr"
    ...
  Case Else
    ...
EndSwitch


либо Select:
Код:
Select
  Case $spc="powt"
    ...
  Case $spc="bngr"
    ...
  Case Else
    ...
EndSelect

Если проверяется значение одной переменной, то предпочтительнее Switch...
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
Re: использование Select

snoitaleR
Как я уже сказал, сравнивать строковые выражения не самый лучший вариант. вот простейший пример
Код:
$a = 'a'

Select
	Case $a = 0
		MsgBox(0, '', 1)
	Case $a = 2
		MsgBox(0, '', 2)
	Case Else
		MsgBox(0, '', 'a')
EndSelect

Это все из-за того, что строковые выражения при сравнении приравниваются 0
Orus, попробуй так
Код:
#include <File.au3>

$var = DriveGetDrive("REMOVABLE")
If Not @error Then
    $aFolder=_FileListToArray($var[2],"*",2)
    if $aFolder[0] <> 0 Then
        For $i=0 to $aFolder[0]
            ;StringLower($aFolder[$i]) - Эта часть, по идее, не нужна. Т.к. результат операции ни чему не присваивается
            $spc = StringLeft($aFolder[$i], 4)
            Select
                Case StringCompare($spc, "powt") = 0
                    MsgBox(4096,"",$aFolder[$i])
                    Exit
                Case Else
                    MsgBox(4096,"","Common")
                    Exit
            EndSelect
        Next
    EndIf
EndIf
 
Автор
O

Orus

Чайник
Сообщения
41
Репутация
1
Re: использование Select

Kaster сказал(а):
Orus, попробуй так
Код:
#include <File.au3>

$var = DriveGetDrive("REMOVABLE")
If Not @error Then
    $aFolder=_FileListToArray($var[2],"*",2)
    if $aFolder[0] <> 0 Then
        For $i=0 to $aFolder[0]
            ;StringLower($aFolder[$i]) - Эта часть, по идее, не нужна. Т.к. результат операции ни чему не присваивается
            $spc = StringLeft($aFolder[$i], 4)
            Select
                Case StringCompare($spc, "powt") = 0
                    MsgBox(4096,"",$aFolder[$i])
                    Exit
                Case Else
                    MsgBox(4096,"","Common")
                    Exit
            EndSelect
        Next
    EndIf
EndIf
результат тот же

З.Ы. Kaster, т.е. ты предлагаешь сравнивать по символьно?
З.Ы.Ы. такое название пойдет?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
Re: Особенности использования функции \"Select\"

Orus [?]
З.Ы. Kaster, т.е. ты предлагаешь сравнивать по символьно?
Именно этим занимается StringCompare, в отличие от равенства. Вот еще один простой пример
Код:
$a = 0
$b = 'a'
MsgBox(0, '', $a = $b)



Добавлено:
Сообщение автоматически объединено:

и кстати говоря, первый скрипт и второй в первом посте не идентичны. первый завершает свою работу после первой же неудачи. второй выполнит все пункты и только после этого выдаст сообщение.
а вообще, скрипты у меня выдали вполне адекватные результаты.
объясняю:
создал на флешке папку powrtfgfg, и запустил твой скрипт, после определенного кол-ва Common выдал название папки которое совпадает с powt, а именно powrtfgfg. не знаю, в чем у тебя затык
 
Автор
O

Orus

Чайник
Сообщения
41
Репутация
1
Re: Особенности использования функции "Select"

Попробовал, чуть изменил(сделал Case с флагами), заработало, просто если попался powt, то флаг с 0 меняю на 1, и потом смотрю по флагу, спс за помощь.
 
Верх