Что нового

получение значения переменных из названий папок и файлов с помощью шаблона

black1

C++,Pic
Сообщения
39
Репутация
0
есть текст в поле edit(GUI AutoIt)
нужно по поочередно пройтись по тексту..
есть несколько переменных мол $sпапка $sархив $sфайл $sномер
получается надо чтобы опознавалось по шаблону папка ,архив , файл и присваивало текст переменной

[box title=этакий пример работы скрипта]
$папка = На вид3(333)
$архив = OXMKN12325(1+1)
$файл = MxS SZ_48_00_SOFT_FC_PI_MAIN
$номер = 10120
$файл = MxS SZ_48_00_SOFT_FC_IE_MAIN
$номер = 1
$папка = На вид2(555)
$архив = OTMKN134534(1+0)
$файл = TR_OBEP_316_00_SOFT_QQC_FI_BAIN2a
$номер = 523 [/box]

вот как то так массивы то есть не нужны, надо тольк 3 переменные дело в том когда будет срабатывать $sпапка = или $sархив = или $sфайл =
будет вызваться функция которая будет вызываться с параметрами $sпапка $sархив $sфайл $sномер

[box title=поле Edit (без комментариев (;папка ;архив ;файл) эт для наглядности)]

На вид3(333): ;папка
OXMKN12325(1+1): ;архив
MxS SZ_48_00_SOFT_FC_PI_MAIN – 10120 ;файл
MxS SZ_48_00_SOFT_FC_IE_MAIN – 1 ;файл
На вид2(555): ;папка
OTMKN134534(1+0): ;архив
TR_OBEP_316_00_SOFT_QQC_FI_BAIN2a – 523 ;файл
На вид3(333): ;папка
ER_OTP_307_00_SOFT_SW_PI_MAIN2a – 143 ;файл
ER_OXP_308_00_SOFT_FC_PI_OAIN2a – 34 ;файл
ER_OTP_315_00_SOFT_FC_PI_MRIN2a –78 ;файл
TR_OBP_316_00_SOFT_FC_FI_BAIN2a – 566 ;файл
ER_OTP_326_00_SOFT_FC_FI_MAIN – 12 ;файл
ER_OTP_327_00_SOFT_FC_PI_MAIN – 345 ;файл
XMKN2123345(1+1): ;архив
FX_HTTR_13_00_SQFT_ZC_PI_MAIN – 65 ;файл[/box]


что то похожее работает 'На вид3\(333\)\:' над сделать на остальные да и с ExitLoop ченть придумать потом...
Код:
$nOffset = 1
While 1
    $array = StringRegExp( $TextEdit1, '(.*На вид.\(333\))\:.*', 1, $nOffset)
    
     If @error = 0 Then
        $nOffset = @extended
	 Else
        ExitLoop
     EndIf
	 
	 for $i = 0 to UBound($array) - 1
      msgbox(0, "RegExp Test with Option 1 - " & $i, $array[$i])
     
  Next
  
  $array2 = StringRegExp( $TextEdit1, '.*\n(.*\(1\+1\))\:.*', 1, $nOffset)
    
     If @error = 0 Then
        $nOffset = @extended
	 Else
        ExitLoop
     EndIf
	 
	 for $i2 = 0 to UBound($array2) - 1
     msgbox(0, "RegExp Test with Option 1 - " & $i2, $array2[$i2])
	 Next
	 
WEnd


все по силам но не могу разобраться с Искомый образец (шаблон). StringRegExp
для
На вид3\(333\) (вроде бы работает не знаю так над или нет?) StringRegExp возвращает 'На вид3(333)'
OXMKN12325(1+1): (вот тут пробвл так \n*\(1\+1\) не работает или \(1\+1\) возвращает не то (1+1) надо OXMKN12325(1+1)
MxS SZ_48_00_SOFT_FC_PI_MAIN – 10120 ( до сюда дойти не смог))) тут нужно $файл = MxS SZ_48_00_SOFT_FC_PI_MAIN $номер = 10120


Также пробовал в скрипте товарища beve http://forum.oszone.net/post-1043105.html (очень удобно но чет не получилось подобрать нужный шаблон
ключ моменты для шаблона
На вид3(333):
(1+1):



В обще подумал может сделать через получить строку Edit, и за тем if`ом пробежаться по ней
 
Автор
B

black1

C++,Pic
Сообщения
39
Репутация
0
Re: StringRegExp(шаблон)"На вид3(333)"OXMKN12325(1+1)"MxS SZ_48_00_SOFT_FC_PI_MAIN"

c темой не ясно.. как ее назвать..
прошу добавить
код скрипта/программы товарища beve http://forum.oszone.net/post-1043105.html
в данном скрипте удобно подставлять шаблоны и смотреть как работают, кнопкой переключаются режимы работы StringRegExp и StringRegExpReplace
сюда http://autoit-script.ru/index.php/topic,4052.0.html
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Re: StringRegExp(шаблон)"На вид3(333)"OXMKN12325(1+1)"MxS SZ_48_00_SOFT_FC_PI_MAIN"

Предупреждение За нарушение правил форума (пункт Б.5):
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.


Данные правила могут пополняться локальными правилами раздела.
Как правильно называть темы

"StringRegExp " - это неприемлемое название темы, переименуйте тему иначе она будет закрыта, а вам возможно будет выдан бан на несколько дней.

С уважением, ваш Модератор.









Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Модератор.
 
Автор
B

black1

C++,Pic
Сообщения
39
Репутация
0
Re: StringRegExp(шаблон)"На вид3(333)"OXMKN12325(1+1)"MxS SZ_48_00_SOFT_FC_PI_MAIN"

кажется получилось для OXMKN12325(1+1):
Код:
'.*\n(.*\(1\+1\))\:.*'
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Автор
B

black1

C++,Pic
Сообщения
39
Репутация
0
получилось так, делаю дальше...
Код:
$nOffset = 1
While 1
    $array = StringRegExp( $TextEdit1, '.*\n', 1, $nOffset)
    
    If @error = 0 Then
       $nOffset = @extended
	 Else
        ExitLoop
	 
     EndIf
	 
	 for $i = 0 to UBound($array) - 1
    ; msgbox(0, "RegExp Test with Option 1 - " & $i, $array[$i])
	 ;**********************************************************'.*На вид.\(333\))\:.*'  '.*\n(.*\(1\+1\))\:.*'
	    $b = StringRegExp($array[$i], '(.*На вид.\(333\))\:.*',0)
		if $b = 1 Then MsgBox(0,StringLen ($array[$i]) ,$array[$i])
		 
			$b = StringRegExp($array[$i], '(.*\(1\+1\)\:).*',0)
		    if $b = 1 Then MsgBox(0,StringLen ($array[$i]) ,$array[$i])
		   
			  $b = StringRegExp($array[$i], '(.* – \d*)',0)
			  if $b = 1 Then MsgBox(0,StringLen ($array[$i]) ,$array[$i])
	 ;**********************************************************
     Next

WEnd
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
black1,
Вы бы написали, что конкретно из этого текста надо получить, а то я, например, ничего не понял.
 
Автор
B

black1

C++,Pic
Сообщения
39
Репутация
0
madmasles,
да хм, задачу в сетки не смог объяснить :(
Над под настроить GuiListView приходится сдвигать
вот что получилось
Код:
#include <GUIConstants.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
;+300
GUICreate("Pristv Print", 775, 415)   
;************************************************
; BUTTON Switch Screen
$scan = GUICtrlCreateButton("scan&doc", 710, 50, 60)
; BUTTON Mode Print
$PrintDuplex = GUICtrlCreateButton("&Duplex", 710, 120, 60)
$PrintSimpleks = GUICtrlCreateButton("&Simplex", 710, 160, 60)
; EDIT 
$Edit1 = GUICtrlCreateEdit("", 5, 5, 700, 390, BitOR($ES_MULTILINE,$ES_AUTOHSCROLL,$WS_HSCROLL,$WS_VSCROLL,$ES_WANTRETURN))
$Edit2 = GUICtrlCreateEdit("c:\qwe\32443\", 5, 395, 700, 60, BitOR($ES_AUTOHSCROLL,$WS_HSCROLL))
; LIST VIEW
Local $iListView = GUICtrlCreateListView("PDF|Архив|Печать|К.СТР", 5, 5, 700, 408)
GUICtrlSetState($iListView,$GUI_HIDE)
;************************************************
GUISetState(@SW_SHOW)
; number
Dim $TextEdit1
Dim $TextEdit2
Dim $stats = 0;
Dim $folder 
Dim $arhive
Dim $fail
Dim $namber
Dim $d
Dim $s
 
While 1
  $msg = GUIGetMsg()

  Select
  Case $msg = $scan
	 if $stats = 0 Then
		$stats = 1
		  ;поле Edit Заполненно, обрабатываем и показываем списк на печать
	    GUICtrlSetState($Edit1,$GUI_HIDE)
	    GUICtrlSetState($Edit2,$GUI_HIDE)
		
		;GUICtrlSetState($Edit2,$GUI_SHOW)
		
    	;GUICtrlSetState($iListView,$GUI_HIDE)
		GUICtrlSetState($iListView,$GUI_SHOW)
	  ;**************   STEP 2 ************************
	  
    $TextEdit1 = GUICtrlRead($Edit1)
	$TextEdit2 = GUICtrlRead($Edit2)
	
	 ;StringFormat('"%s" e "%s%s" "%s%s"', $winrarpath, $rootpath &"555\", $file, $rootpath &"555\")
    ;Option 1, using offset
 
 
$nOffset = 1
While 1
    $array = StringRegExp( $TextEdit1, '.*\n', 1, $nOffset)
    
    If @error = 0 Then
       $nOffset = @extended
	 Else
        ExitLoop
	 
     EndIf


	 for $i = 0 to UBound($array) - 1
    ; msgbox(0, "RegExp Test with Option 1 - " & $i, $array[$i])
	 ;**********************************************************'.*На вид.\(333\))\:.*'  '.*\n(.*\(1\+1\))\:.*'
	    $b = StringRegExp($array[$i], '(.*На вид.\(333\))\:.*',0)
		;if $b = 1 Then MsgBox(0,StringLen ($array[$i]) ,$array[$i])
		 if $b = 1 Then $folder = 333
		
        $b = StringRegExp($array[$i], '(.*На вид.\(555\))\:.*',0)
		;if $b = 1 Then MsgBox(0,StringLen ($array[$i]) ,$array[$i])
		 if $b = 1 Then $folder = 555		
			
			$b = StringRegExp($array[$i], '(.*\(1\+1\)\:).*',0)
			;if $b = 1 Then MsgBox(0,StringLen ($array[$i]) ,$array[$i])
			if $b = 1 Then $arhive = StringTrimRight( $array[$i], 3 )
			
			$b = StringRegExp($array[$i], '(.*\(1\+0\)\:).*',0)
			;if $b = 1 Then MsgBox(0,StringLen ($array[$i]) ,$array[$i])
			if $b = 1 Then $arhive = StringTrimRight( $array[$i], 3 )
			   
			   $b = StringRegExp($array[$i], '(.* – \d*)',0)
			   ;if $b = 1 Then MsgBox(0,StringLen ($array[$i]) ,$array[$i])
			   ; файл и номер
			   if $b = 1 Then
			   $fail = StringRegExp($array[$i], '(.*) – \d*',1)
		       for $i2 = 0 to UBound($fail) - 1
			    $fail = $fail[$i2]
			   Next
			  
		       $namber = StringRegExp($array[$i], '.* – (\d*)',1)
		       for $i2 = 0 to UBound($namber) - 1
			    $namber = $namber[$i2]
			   Next
			  
			  ; GUICtrlCreateListViewItem($fail &'|' &$arhive &'|' &$folder &'|' &$namber , $iListView)
			  GUICtrlCreateListViewItem(StringFormat('%s|%s|%d|%s',$fail,$arhive,$folder,$namber ), $iListView)
			EndIf
	 ;**********************************************************
     Next

WEnd




	 Else
		$stats = 0 	
		  ;вернутся на поле Edit, но мб не давать редактировать
		 ;GUICtrlSetState($Edit2,$GUI_HIDE)
		GUICtrlSetState($Edit1,$GUI_SHOW)
		GUICtrlSetState($Edit2,$GUI_SHOW)
		
    	GUICtrlSetState($iListView,$GUI_HIDE)
		;GUICtrlSetState($iListView,$GUI_SHOW)
       ;**************   STEP 2 ************************
       
      
   
   
   
	 EndIf

		

     ; MsgBox(0, "GUI Event", "scan!" &$stats)

    Case $msg = $GUI_EVENT_CLOSE
     ; MsgBox(0, "GUI Event", "You clicked CLOSE! Exiting...")
      ExitLoop
  EndSelect
WEnd


На вид3(333):

QWERF50120U21(1+1):

FGH SQ_4A_00_SOFT_GC_PI_MGIN – 10120

TFD SZ_4D_00_SOFT_FC_UE_TAIN – 1

Всего: 10121



На вид2(555):

FGRMOS2E01FW123(1+0):

307_00_QFT_A_Y_MARTa – 940

308_00_SUT_VC_HI_MAINQa – 9

315_00_SOFT_FC_PI_MAUIa – 331

316_00_W_FC_R_MAIN2a – 256

326_00_SZRT_oC_PI_HAIN – 212

327_00_SX_C_VI_U – 252



TRGDF420124(1+1):

115_00_SOF_Q_X_MUN – 816



Всего: 2820
 
Верх