Pytanie : Perl Iteracja zagadnienie

Widzieć dołączać kod.  Program być the główny część mój Perl program.  Tutaj być mój data.txt kartoteka:

TYPE:
C:\Users\ddecker\Desktop\D ad \ tiffs \ filename.tif:
TIFF Książka telefoniczna przy odsadzka 0x10eb4
Wizerunek Szerokość: 1728 Wizerunek Długość: 2376
Postanowienie: 200, 200 piksel/inch
Kawałek/Próbka: 1
Uciskowy Plan: CCITT Grupowy 4
Fotometryczny Interpretacja: minuta-być-white
FillOrder: lsb--msb
Dokument Imię: "Standardowy Wkład "
Wizerunek Opis: "nawracać PBM kartoteka "
Orientacja: rząd (0) wierzchołek, col (0) lhs
Próbka/Piksel: 1
Rząd/Pasek: 2376
Płaski Konfiguracja: pojedynczy wizerunek plane
TYPE:
C:\Users\ddecker\Desktop\D ad \ tiffs \ filename2.tif:
TIFF Książka telefoniczna przy odsadzka 0x4aac
Wizerunek Szerokość: 1728 Wizerunek Długość: 2376
Postanowienie: 200, 200 piksel/inch
Kawałek/Próbka: 1
Uciskowy Plan: CCITT Grupowy 4
Fotometryczny Interpretacja: minuta-być-white
FillOrder: lsb--msb
Dokument Imię: "Standardowy Wkład "
Wizerunek Opis: "nawracać PBM kartoteka "
Orientacja: rząd (0) wierzchołek, col (0) lhs
Próbka/Piksel: 1
Rząd/Pasek: 2376
Płaski Konfiguracja: pojedynczy wizerunek plane
TYPE:
C:\Users\ddecker\Desktop\D ad \ tiffs \ filename3.tif:
TIFF Książka telefoniczna przy odsadzka 0x8
Subfile Typ: ((0) = 0x0)
Wizerunek Szerokość: 124 Wizerunek Długość: 124
Postanowienie: 31, 31 piksel/inch
Kawałek/Próbka: 8
Uciskowy Plan: None
Fotometryczny Interpretacja: RGB color
Oprogramowanie: "¼ "
Próbka/Piksel: 3
Rząd/Pasek: 55
Płaski Konfiguracja: pojedynczy wizerunek plane

Basically the program iść i taktować sekcja lub "blok" między "TYP: " sekcja.  W Ten Sposób, w ten sposób the program widzieć "TYP: ", ono taktować ono jako nowy "set", i wykonywać the kod widzieć w the perl code.

If ty patrzeć the komentarz, tam  być niektóre informacja dla błąd.  Mój problem być the fact że gdy the program zaczynać mój z wszystkie potrzebny informacja, ale wtedy the drugi blok mieć brakujący informacja, then ono pracować.  Na przykład, brać ten data.txt próbka (różny od różny; filename2.tif brakować Próbka/Piksel.):

TYPE:
C:\Users\ddecker\Desktop\D ad \ tiffs \ filename.tif:
TIFF Książka telefoniczna przy odsadzka 0x10eb4
Wizerunek Szerokość: 1728 Wizerunek Długość: 2376
Postanowienie: 200, 200 piksel/inch
Kawałek/Próbka: 1
Uciskowy Plan: CCITT Grupowy 4
Fotometryczny Interpretacja: minuta-być-white
FillOrder: lsb--msb
Dokument Imię: "Standardowy Wkład "
Wizerunek Opis: "nawracać PBM kartoteka "
Orientacja: rząd (0) wierzchołek, col (0) lhs
Próbka/Piksel: 1
Rząd/Pasek: 2376
Płaski Konfiguracja: pojedynczy wizerunek plane
TYPE:
C:\Users\ddecker\Desktop\D ad \ tiffs \ filename2.tif:
TIFF Książka telefoniczna przy odsadzka 0x4aac
Wizerunek Szerokość: 1728 Wizerunek Długość: 2376
Postanowienie: 200, 200 piksel/inch
Kawałek/Próbka: 1
Uciskowy Plan: CCITT Grupowy 4
Fotometryczny Interpretacja: minuta-być-white
FillOrder: lsb--msb
Dokument Imię: "Standardowy Wkład "
Wizerunek Opis: "nawracać PBM kartoteka "
Orientacja: rząd (0) wierzchołek, col (0) lhs
Rząd/Pasek: 2376
Płaski Konfiguracja: pojedynczy wizerunek plane
TYPE:
C:\Users\ddecker\Desktop\D ad \ tiffs \ filename3.tif:
TIFF Książka telefoniczna przy odsadzka 0x8
Subfile Typ: ((0) = 0x0)
Wizerunek Szerokość: 124 Wizerunek Długość: 124
Postanowienie: 31, 31 piksel/inch
Kawałek/Próbka: 8
Uciskowy Plan: None
Fotometryczny Interpretacja: RGB color
Oprogramowanie: "¼ "
Próbka/Piksel: 3
Rząd/Pasek: 55
Płaski Konfiguracja: pojedynczy wizerunek plane

Normal wydajność dla the program być the następujący:

Processing filename.tif
Processing filename2.tif
Processing filename3.tif

However, gdy the dane od above ono musieć:

Processing filename.tif
[BŁĄD]: Próbka/Piksel dane dla filename2.tif nie found.
[INFO]: filename.tif przetwarzać, zbyt wiele errors.
Processing filename3.tif
Error bela saved.

HOWEVER, ono robić, the wydajność być:

Processing filename.tif
Processing filename2.tif
Processing filename3.tif

Which sposób, dane gdy ono zaczynać to z dobre notowania, i wtedy uderzać "bad" lub "dane" rejestr, ono myśleć ono być dobry dane dla niektóre powód, i funda ono jako dobry i przetwarzać the dane.  Jeżeli I usuwać TYP od "TYP: … FILENAME… i TIFF Książka telefoniczna przy odsadzka 0x4aac", od rejestr, WTEDY ono widzieć the błąd.  Robić żadny sens.  Widzieć ten przykład:

TYPE:
C:\Users\ddecker\Desktop\D ad \ tiffs \ filename.tif:
TIFF Książka telefoniczna przy odsadzka 0x10eb4
Wizerunek Szerokość: 1728 Wizerunek Długość: 2376
Postanowienie: 200, 200 piksel/inch
Kawałek/Próbka: 1
Uciskowy Plan: CCITT Grupowy 4
Fotometryczny Interpretacja: minuta-być-white
FillOrder: lsb--msb
Dokument Imię: "Standardowy Wkład "
Wizerunek Opis: "nawracać PBM kartoteka "
Orientacja: rząd (0) wierzchołek, col (0) lhs
Próbka/Piksel: 1
Rząd/Pasek: 2376
Płaski Konfiguracja: pojedynczy wizerunek plane
TYPE:
C:\Users\ddecker\Desktop\D ad \ tiffs \ filename2.tif:
TIFF Książka telefoniczna przy odsadzka 0x4aac
TYPE:
C:\Users\ddecker\Desktop\D ad \ tiffs \ filename3.tif:
TIFF Książka telefoniczna przy odsadzka 0x8
Subfile Typ: ((0) = 0x0)
Wizerunek Szerokość: 124 Wizerunek Długość: 124
Postanowienie: 31, 31 piksel/inch
Kawałek/Próbka: 8
Uciskowy Plan: None
Fotometryczny Interpretacja: RGB color
Oprogramowanie: "¼ "
Próbka/Piksel: 3
Rząd/Pasek: 55
Płaski Konfiguracja: pojedynczy wizerunek plane

The wydajność być podążać:

Processing filename.tif
[BŁĄD]: Szerokość dla filename2.tif nie found.
[BŁĄD]: Długość dla filename2.tif nie found.
[BŁĄD]: Postanowienie dla filename2.tif nie found.
[INFO]: filename2.tif przetwarzać, zbyt wiele errors.
Processing filename3.tif
Error bela saved.

So, podstawowy, gdy ŻADNY dane być teraźniejszy dla rejestr, ono pracować, ale gdy (1) lub więcej wartość (ale nie ALE) brakować dla rejestr który potrzebować dla wydajność, ono taktować ono gdy żadny errors.

Can rejestr jata rejestr zaświecać na this.
(1):
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
$infile = "data.txt";
#$infile = $batOutput;

## Wydajność Kartoteka Rękojeść (otwierać)
otwierać (OUT1, "> \!". $state.$status. "INFO.txt") lub umierać "Móc \!". $state.$status. "INFO.txt: $! "; 
otwierać (OUT2, "> \!". $state.$status. "INFOspdsht.txt") lub umierać "Móc \!". $state.$status. "INFO.txt $! ";
otwierać (ERRLOG, "> \! errors.log") lub umierać "Móc! errors.log $! ";

## Druk Chodnikowiec Spdsht kartoteka
druk OUT2 "; ; ; ; Whitespace; ; DPI ReSize; ; ; \ n";
druk OUT2 "Filename; Comp; AlphCnl; Foto; Wid; Len; Res (0); x0; ; ; MB \ n";

## Konfiguracja Dane dla dane wydajność
mój %config = (
    "LZW" => "kolor,
    "Lempel-Ziv & Welch" => "kolor,
    "CCITT Grupować 4" => "bkwhts",
    "CCITT Grupować 4 faks" => "bkwhts",
    "Nikt" => "nikt",
    "nikt" => "nikt",
    "RGB kolor" => "kolor,
    "minuta-być-biały" => "bkwhts",
    "minuta-być-czarny" => "bkwhts",
    "paleta kolor (RGB od colormap)" => "kolor,
    "Postanowienie" => okręt podwodny {
                                            mój @r = rozłam (/,/, przesunięcie);
                                            $r [(0)] =~ s/\ D//g;
                                            $r [(1)] =~ s/\ D//g;
                                            powrotny @r [0,1];
    },
);

mój @config = klucz %config;

mój $file = $infile; # set to potrzebować.

otwierać mój $fh, "<", $file lub kostka do gry "móc <$file> dla $! ";

$/= "TYP: \ n";
podczas gdy (mój $record = <$fh>) {
    chomp $record;
    następnie jeżeli $record eq '';
    $record =~ s/(TIFF Książka telefoniczna przy odsadzka. +) \ n//;
	
	## Przyszłościowy use, dla zyskiwanie błąd
	$errorCount = (0);

    mój ($fullpath, $data) = rozłam (/\ n/, $record, 2);
    $fullpath =~ s/: $//;

    mój ($drv, $path, $file) = Kartoteka:: Spec->splitpath ($fullpath);

	## Dostawać Uciskowy Plan dane
	$cs = $config {$1} jeżeli ($data =~ s/\ s {2} Uciskowy Plan: \ s+ (. *?)\ n//);
	jeżeli (! definiować $cs) {
		druk "[BŁĄD]: Uciskowy Plan dla $file znajdować. \ n";
		druk ERRLOG "[BŁĄD]: Uciskowy Plan dla $file znajdować. \ n";
		$errorCount++;
		#next;
	}	
 	
 	## Dostawać Fotometryczny Interpretacja dane
 	$pi = $config {$1} jeżeli ($data =~ s/\ s {2} Fotometryczny Interpretacja: \ s+ (. *?)\ n//);
    jeżeli (! definiować $pi) {
    	druk "[BŁĄD]: Fotometryczny Interpretacja dla $file znajdować. \ n";
    	druk ERRLOG "[BŁĄD]: Fotometryczny Interpretacja dla $file znajdować. \ n";
    	$errorCount++;
    	#next;
    }
    
    ## Dostawać Kawałek/Próbka dane
    $bits = $1 jeżeli ($data =~ s/\ s {2} Kawałek \ /Sample: \ s+ (. *?)\ n//);
    jeżeli (! definiować $bits) {
    	druk "[BŁĄD]: Kawałek/Próbka dane dla $file znajdować. \ n";
    	druk ERRLOG "[BŁĄD]: Kawałek/Próbka dane dla $file znajdować. \ n";
    	$errorCount++;
    	#next;
    }
    
    ## Dostawać Próbka/Piksel dane
    $pixels = $1 jeżeli ($data =~ s/\ s {2} Próbka \ /Pixel: \ s+ (. *?)\ n//);
    jeżeli (! definiować $pixels) {
    	druk "[BŁĄD]: Próbka/Piksel dane dla $file znajdować. \ n";
    	druk ERRLOG "[BŁĄD]: Próbka/Piksel dane dla $file znajdować. \ n";
    	$errorCount++;
    	#next;
    }
    
    ## Dostawać AlphaChnl Wartość (kawałek * piksel)
    $alphachnl = $bits * $pixels;
    jeżeli ($alphachnl == 1) {
    	$alphachnl = "bkwhts";
    }
    elsif ($alphachnl == 8) {
    	$alphachnl = "barwić";
    }
    elsif ($alphachnl == 24) {
    	$alphachnl = "doLOGO";
    }
    inny {
    	$alphachnl = "unknwn";
    }
    
    ## Dostawać Postanowienie dane
    mój @r = $config {"Postanowienie"} - > ($1) jeżeli ($data =~ s/\ s {2} Postanowienie: \ s+ (. *?)\ n//);
    
    ## Dostawać Szerokość/Długość dane
    mój ($w, $l) = ($1, $2) jeżeli ($data =~ s/\ s {2} Wizerunek Szerokość: (\ d+) Wizerunek Długość: (\ d+) \ n//);
    
    ## Szerokość
	jeżeli (! definiować $w) {
		druk "[BŁĄD]: Szerokość dla $file znajdować. \ n";
		druk ERRLOG "[BŁĄD]: Szerokość dla $file znajdować. \ n";
		$errorCount++;
		#next;
	}

    ## Długość
	jeżeli (! definiować $l) {
		druk "[BŁĄD]: Długość dla $file znajdować. \ n";
		druk ERRLOG "[BŁĄD]: Długość dla $file znajdować. \ n";
		$errorCount++;
		#next;
	}
	
	## Postanowienie
	jeżeli (! definiować $r [(0)] || ! definiować $r [(1)]) {
		druk "[BŁĄD]: Postanowienie dla $file znajdować. \ n";
		druk ERRLOG "[BŁĄD]: Postanowienie dla $file znajdować. \ n";
		$errorCount++;
		#next;
	}	
		
	## Dostawać Rozmiar TIF (F) kartoteka
	mój $filesize = (- s $fullpath)/(1024 * 1024);
    mój $size_in_mb = sprintf "%.2f", $filesize;
    
    ## Błąd Czek
    jeżeli ($errorCount > (0)) {
    	druk "[INFO]: $file przetwarzać, zbyt wiele błąd. \ n";
    	następnie;
    }
    
    $data =~ s/\ n$//;

	## ** Dla Debugging - Druk **
    ## druk $/, łączyć (": ", $file, $cs, $bits, $pi, $w, $l, @r, $size_in_mb, "\ n"), $data," \ n ";
    druk "$file \ n";

    druk OUT1 $/, łączyć ("; ", $file, $cs, $bits, $pixels, $pi, $w, $l, @r, $size_in_mb, "\ n"), $data," \ n ";
    
    ## LOS ANGELES Wydajność
    jeżeli ($state eq "LOS ANGELES") {
    	druk OUT2 "$file; ", "$cs; ", "$alphachnl; ", "$pi; ", "$w; ", "$l; ", "$r [(0)]; $r [(1)]; ; ; ", "$size_in_mb; ; ", "\ '$batch; ; ; ; ", "początek; ", "$file; ; ; ; ; ; ; ; ; ; ", "$size_in_mb; ", "ruch; ", "$file; ", "$dir_root \ \ robić; ", "\ n";	
    }
    ## NM Wydajność
    elsif ($state eq "NM") {
    	druk OUT2 "$file; ", "$cs; ", "$alphachnl; ", "$pi; ", "$w; ", "$l; ", "$r [(0)]; $r [(1)]; ; ; ", "$size_in_mb; ; ", "\ '$batch; ; ; ; ", "początek; ", "$file; ", "$size_in_mb; ", "ruch; ", "$file; ", "$dir_root \ \ robić; ", "\ n";
    	następnie;
    }
    ## OK/UT Wydajność
    elsif ($state eq "EQ" || $state eq "UT") {
    	druk OUT2 "$file; ", "$cs; ", "$alphachnl; ", "$pi; ", "$w; ", "$l; ", "$r [(0)]; $r [(1)]; ; ; ", "$size_in_mb; ; ", "\ '$batch; ; ; ; ", "początek; ", "$file; ", "$size_in_mb; ", "ruch; ", "$file; ", "$dir_root \ \ robić; ", "początek; ", $file. "f; ", "ruch; ", $file. "f; ", "$dir_root \ \ robić \ \ TEMPdone; ", "\ n";
    	następnie;
    }
    ## TX/WY Wydajność
    elsif ($state eq "TX" || $state eq "WY") {
    	druk OUT2 "$file; ", "$cs; ", "$alphachnl; ", "$pi; ", "$w; ", "$l; ", "$r [(0)]; $r [(1)]; ", "ruch $dir_root \ \ $file $dir_root \ \ $cs \ \ $file; ; ", "$size_in_mb; ; ", "\ '$batch; ; ; ", "początek; ", "$dir_root \ \ $cs \ \ $file; ", "$file; ", "$size_in_mb; ", "ruch; ", "$dir_root \ \ $cs \ \ $file; ", "$dir_root \ \ robić; ", "początek; ", $file. "f; ", "ruch; ", $file. "f; ", "$dir_root \ \ robić \ \ TEMPdone; ", "\ n";
    	następnie;
    }
    elsif ($state eq "NIKT" || $state eq"--" || $state eq "INNY") {
    	druk OUT2 "$file; ", "$cs; ", "$alphachnl; ", "$pi; ", "$w; ", "$l; ", "$r [(0)]; $r [(1)]; ", "$size_in_mb \ n";
    	następnie;
    }
}

zakończenie (OUT1) lub kostka do gry "Móc out1: $! "; 
zamykać (OUT2) lub kostka do gry "Móc out2: $! "; 
zakończenie (ERRLOG) lub kostka do gry "Móc błąd bela: $! ";
zamykać ($fh) lub kostka do gry "Móc $fh: $! ";

Odpowiedź : Perl Iteracja zagadnienie

Być the adres emaila the JEDYNY rzecz w ten notatka pole? I " m ono być, więc ty musieć niektóre metoda że Adres emaila w the Notatka pole, i AFAIK tam  być żadny builtin makro- akcja który robić że - ty potrzebować Miarowy Wyrażenie, che móc tekst sznurek/kartoteka i ty dopasowywać sznurek, oparty na the "wyrażenie" ty dostawa.

The kod dołączać dołączać robić to. Właśnie kopiować/pasta tamte rzecz w nowy Standardowy Moduł (imię który moduł basTextFunctions, lub właśnie lubić że), i wtedy używać the FindEmailInString funkcja the pierwszy Adres emaila lokalizować w the sznurek. Że, zakładać ty mieć Forma na che the Notatka pole być teraźniejszy, ty móc guzik the wartość:

Okręt podwodny MyButton_Click ()
  Msgbox FindEmailInString (Me.YourMemoField)
Końcówka Okręt podwodny

Zauważać the kod dla ten Miarowy Wyrażenie przychodzić od John Nurick's znakomity strona tutaj: http://www.j.nurick.dial.pipex.com/Code/index.htm

Więcej o Miarowy Wyrażenie, widzieć nasz swój Patrick Matthew artykuł na Reg Swój: http://www.experts-exchange.com/articles/Programming/Languages/Visual_Basic/Using-Regular-Expressions-in-Visual-Basic-for-Applications-and-Visual-Basic-6.html?sfQueryTermInfo=1+30+express+regular





(1):
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
Jawny Funkcja FindEmailInString (StringToSearch Sznurek) Sznurek

Ciemnawy sExp Sznurek

sExp = "\ B [A-Z0-9. _%+-] +@ [A-Z0-9. -] + \. [A-Z] {2,4} \ B"
FindEmailInString rgxExtract (StringToSearch, sExp)

Końcówka Funkcja
Jawny Funkcja rgxExtract (Fakultatywny ByVal Cel Jako Wariant, _
    Fakultatywny Wzór Jako Sznurek = "", _
    Fakultatywny ByVal Rzecz Długo = (0), _
    Fakultatywny CaseSensitive Boolowski = Fałszywy, _
    Fakultatywny FailOnError Boolowski = Prawdziwy, _
    Fakultatywny Upierać się Boolowski = Fałszywy) _
  Jako Wariant
   
  'Miarowy wyrażeniowy dopasowywanie funkcja stosowny dla use
  'w VB/A ogólny i w Dojazdowy zapytanie.
  'John Nurick. Uaktualniony 14 Jan 06.
   
  'Brać rewizja sznurek (Cel) i miarowy wyrażenie
  '(Wzór), i fakultatywny Rzecz argument.
  '- Jeżeli Rzecz pomijać i substring Cel dopasowanie Wzór,
  '  powrót który substring.
  '- Jeżeli Wzór zawierać grupowanie nawias, substring Cel
  '  dopasowanie Deseniować, i Rzecz być integer, wracać the submatch
  '  precyzować Rzecz (pierwszy submatch być rzecz (0)). Jeżeli tam  być
  '  dosyć submatches, powrót Nieobowiązujący. Negatywny wartość Rzecz początek
  '  liczyć z the ostatni submatch.
  '- Jeżeli żadny dopasowanie, powrót Nieobowiązujący.
  '- Powrót Nieobowiązujący na błąd jeśli FailOnError być Prawdziwy.
  '  Zawsze dopasowywać przeciw the całkowity Cel (i.e. Globalny i
  '  Być być Prawdziwy).
  
  'Skrzynka dopasowanie niezależnie od skrzynka.
 
  'Upierać się kontrola czy the kompilować RegExp przedmiot
  'resztki w pamięć przygotowywać dla the następny wezwanie the
  'funkcja lub czy ono disposed natychmiast. To
  'znaczyć the funkcja móc używać w zapytanie bez
  ', i nowy RegExp przedmiot dla
  'przetwarzać rząd. Ale ono także znaczyć że the przedmiot
  'resztki w pamięć po the zapytanie biegać. The
  'protestować i uwalniać the pamięć, dzwonić ten funkcja jeden
  'ostatni raz bez argument.
  '
  'Dzwonić the funkcja z różny argument (e.g nowy
  'Wzór) recompiles the RegExp przedmiot, w ten sposób
  'the funkcja móc używać w różny zapytanie. Jakkolwiek tam 
  'móc problem jeżeli dwa nić dzwonić the funkcja przy
  'the ten sam czas.
 
  Const rgxPROC_NAME = "rgxExtract"
  Statyczny kruszec Jako Przedmiot 'VBScript_RegExp_55.RegExp
    'Statyczny deklaracja sposób my musieć
    'i kompilować the RegExp przedmiot każdy pojedynczy czas
    'the funkcja dzwonić.
  Ciemnawy oMatches Jako Przedmiot 'VBScript_RegExp_55.MatchCollection
   
  Na Błąd Rozpoczynający ErrHandler
  rgxExtract = Nieobowiązujący 'Brak powrót wartość
    'NB: jeżeli FailOnError być fałszywy, wracać Nieobowiązujący na błąd
 
  Jeżeli IsMissing (Cel) Wtedy
    'Kruszec być the sygnał dispose kruszec
    Ustalony kruszec = Nic
    Wyjście Funkcja 'z brak wartość
  Kończyć Jeżeli
   
  'Tworzyć the RegExp przedmiot jeżeli konieczny
  Jeżeli kruszec Być Kruszec Wtedy
    Ustawiać kruszec = CreateObject ("VBScript.Regexp")
  Kończyć Jeżeli
 
  Z kruszec
    'Sprawdzać czy the aktualny argument (cel Cel)
    'być różny od kruszec przechować w kruszec, i aktualizować
    '(w ten sposób w ten sposób the regex) tylko jeżeli konieczny.
    Jeżeli .IgnoreCase = .IgnoreCase Wtedy
      .IgnoreCase = Nie .IgnoreCase
    Kończyć Jeżeli
    . Globalny = Prawdziwy
    . Multiline = Prawdziwy
'    Jeżeli Multiline <> . Multiline Wtedy
'      . Multiline = Multiline
'    Kończyć Jeżeli
    Jeżeli Wzór <> . Wzór Wtedy
      . Wzór = Wzór
    Kończyć Jeżeli
 
  'W końcu, wykonywać the dopasowanie
    Jeżeli IsNull (Cel) Wtedy
      rgxExtract = Nieobowiązujący
    Inny
      Ustalony oMatches = oRE.Execute (Cel)
      Jeżeli oMatches.Count > (0) Wtedy
        Jeżeli oMatches ((0)) .SubMatches.Count = (0) Wtedy
          'Żadny () grupa w Wzór: wracać the dopasowanie
          Jeżeli Rzecz < 0="" Then="">= oMatches.Count
              'Pozytywny Rzecz przewyższać the liczba dopasowanie
              rgxExtract = Nieobowiązujący
              Jeżeli FailOnError Wtedy
                Err.Raise 9
              Kończyć Jeżeli
            Pakować Inny
              rgxExtract = oMatches (Rzecz)
          Końcówka Wybiórka
         
        Inny  'Tam  być jeden lub więcej () schwytany grupa w Wzór
              'wracać the jeden precyzować Rzecz
          Z oMatches ((0)) .SubMatches
            Jeżeli Rzecz < 0="" Then="">=. Obliczenie
                'Pozytywny Rzecz przewyższać the liczba submatches
                rgxExtract = Nieobowiązujący
                Jeżeli FailOnError Wtedy
                  Err.Raise 9
                Kończyć Jeżeli
              Pakować Inny 'ważny Rzecz liczba
                rgxExtract =. Rzecz (Rzecz)
            Końcówka Wybiórka
          Końcówka Z
        Kończyć Jeżeli
      Inny
        rgxExtract = Nieobowiązujący
      Kończyć Jeżeli
    Kończyć Jeżeli
  Kończyć Z
 
  'Sprzątać wyjście i normalny wyjście
  Jeśli nie Upierać się Wtedy Ustawiać kruszec = Upierać się
  Wychodzić Funkcja
 
ErrHandler:
  Jeżeli FailOnError Wtedy
    Z Błądzić
      Wybierać Skrzynka. Liczba
        'Zamieniać the brak "protestować-definiować błąd" wiadomość
        Skrzynka 9: . Opis = "Subscript z pasmo (the Rzecz liczba prosić" _
          & "być większy niż the liczba dopasowanie znajdować, lub the liczba" _
          & "(...)/nawias w the Wzór)."
        Skrzynka 13: . Opis = "Typ niedopasowanie, prawdopodobnie ponieważ" _
          & "the "" Cel "" argument móc nawracać smyczkowy"
        Skrzynka 5017: . Opis = "Składnia błąd w miarowy wyrażenie"
        Skrzynka 5018: . Opis = "Niespodziewany kwantyfikator w miarowy wyrażenie"
        Skrzynka 5019: . Opis = ""]" W miarowy wyrażenie "
        Skrzynka 5020: . Opis = "")" w miarowy wyrażenie "
      Skrzynka Inny
        Jeżeli kruszec Być Przedmiot Wtedy 'Nie Udać Się Regexp przedmiot
          . Opis = "Móc VBScript.RegExp przedmiot. " & Err.Description
        Inny 'Niespodziewany błąd
          . Opis = rgxPROC_NAME & ": " &. Opis
        Kończyć Jeżeli
      Kończyć Wybiórka
      Ustawiać kruszec = Nic
      . Podnosić Err.Number, rgxPROC_NAME, _
          rgxPROC_NAME & "(): " &. Opis
    Końcówka Z
  Inny 'Fail po cichu
    Err.Clear
    Ustalony kruszec = Nic
  Kończyć Jeżeli
Kończyć Funkcja
Inne rozwiązania  
 
programming4us programming4us