Vraag : De kwestie van de Herhaling van Perl

Zie code in bijlage.  Dit is het belangrijkste deel van mijn programma Perl.  Hier is mijn data.txt dossier:

TYPE:
C:\Users\ddecker\Desktop\D ad \ tiffs \ filename.tif: folder
TIFF bij de Breedte van het compensatie0x10eb4
Beeld: 1728 de Lengte van het beeld: /> Resolutie 2376 Beetjes/Steekproef: 1
de Regeling van de Compressie: CCITT Photometric Interpretatie van de Groep 4
: min-is/> FillOrder: lsb-aan/> de Naam van het Document: De Beschrijving van het Beeld van de „standaardInput "
: „omgezette Pbm- dossier "
Richtlijn: rij 0 bovenkant, col. 0 lhs
Steekproeven/Pixel: 1
Rijen/Strook: /> VlakConfiguratie 2376TYPE:
C:\Users\ddecker\Desktop\D ad \ tiffs \ filename2.tif: folder
TIFF bij de Breedte van het compensatie0x4aac
Beeld: 1728 de Lengte van het beeld: /> Resolutie 2376 Beetjes/Steekproef: 1
de Regeling van de Compressie: CCITT Photometric Interpretatie van de Groep 4
: min-is/> FillOrder: lsb-aan/> de Naam van het Document: De Beschrijving van het Beeld van de „standaardInput "
: „omgezette Pbm- dossier "
Richtlijn: rij 0 bovenkant, col. 0 lhs
Steekproeven/Pixel: 1
Rijen/Strook: /> VlakConfiguratie 2376TYPE:
C:\Users\ddecker\Desktop\D ad \ tiffs \ filename3.tif: folder
TIFF bij het Type van compensatie0x8
Deeldossier: (0 = 0x0)/> de Breedte van het Beeld Resolutie 124 Beetjes/Steekproef: 8
de Regeling van de Compressie: Photometric Interpretatie van None
: RGB color
Software: de Steekproeven van „¼ "
/Pixel: 3
Rijen/Strook: /> VlakConfiguratie 55
Basically het programma door gaat en elk sectie of „blok“ tussen elk „TYPE behandelt: “ secties.  Zo, everytime ziet het programma „TYPE: “ die, behandelt het het aangezien nieuw „plaatst“, en voert de code uit in perl code.

If wordt gezien u de commentaren bekijkt, is er wat informatie voor fout het controleren.  Mijn probleem is het feit dat wanneer het programma met al nodig informatie, maar anderzijds het tweede blok begint ontbrekende informatie heeft, dan werkt het niet.  Bijvoorbeeld, neem deze data.txt steekproef (verschillend van hierboven; filename2.tif mist Steekproef/Pixel.):

TYPE:
C:\Users\ddecker\Desktop\D ad \ tiffs \ filename.tif: folder
TIFF bij de Breedte van het compensatie0x10eb4
Beeld: 1728 de Lengte van het beeld: /> Resolutie 2376 Beetjes/Steekproef: 1
de Regeling van de Compressie: CCITT Photometric Interpretatie van de Groep 4
: min-is/> FillOrder: lsb-aan/> de Naam van het Document: De Beschrijving van het Beeld van de „standaardInput "
: „omgezette Pbm- dossier "
Richtlijn: rij 0 bovenkant, col. 0 lhs
Steekproeven/Pixel: 1
Rijen/Strook: /> VlakConfiguratie 2376TYPE:
C:\Users\ddecker\Desktop\D ad \ tiffs \ filename2.tif: folder
TIFF bij de Breedte van het compensatie0x4aac
Beeld: 1728 de Lengte van het beeld: /> Resolutie 2376 Beetjes/Steekproef: 1
de Regeling van de Compressie: CCITT Photometric Interpretatie van de Groep 4
: min-is/> FillOrder: lsb-aan/> de Naam van het Document: De Beschrijving van het Beeld van de „standaardInput "
: „omgezette Pbm- dossier "
Richtlijn: rij 0 bovenkant, col. 0 lhs
Rijen/Strook: /> VlakConfiguratie 2376TYPE:
C:\Users\ddecker\Desktop\D ad \ tiffs \ filename3.tif: folder
TIFF bij het Type van compensatie0x8
Deeldossier: (0 = 0x0)/> de Breedte van het Beeld Resolutie 124 Beetjes/Steekproef: 8
de Regeling van de Compressie: Photometric Interpretatie van None
: RGB color
Software: de Steekproeven van „¼ "
/Pixel: 3
Rijen/Strook: /> VlakConfiguratie 55
Normal voor het programma is de volgende:

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

However, zou wanneer het missen van de gegevens van bovengenoemd het moeten zijn:

Processing filename.tif
[FOUT]: Steekproef/de gegevens van Pixel voor filename2.tif niet found.
[info]: filename.tif werd niet verwerkt, teveel errors.
Processing filename3.tif
Error logboek saved.

HOWEVER, doet het dit niet, is de output: het middel

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

Which, dat wanneer het met een goed verslag, begint en dan een „slechte“ of „ontbrekende gegevens“ verslag raakt, het denkt het is goed gegeven om sommige redenen, en behandelt het als goed en verwerkt de gegevens.  Als ik ALLES uit „TYPE verwijder: … FILENAME… en de Folder van TIF bij compensatie 0x4aac“, van een verslag, het zien DAN de fouten.  Houdt geen steek.  Zie dit voorbeeld:

TYPE:
C:\Users\ddecker\Desktop\D ad \ tiffs \ filename.tif: folder
TIFF bij de Breedte van het compensatie0x10eb4
Beeld: 1728 de Lengte van het beeld: /> Resolutie 2376 Beetjes/Steekproef: 1
de Regeling van de Compressie: CCITT Photometric Interpretatie van de Groep 4
: min-is/> FillOrder: lsb-aan/> de Naam van het Document: De Beschrijving van het Beeld van de „standaardInput "
: „omgezette Pbm- dossier "
Richtlijn: rij 0 bovenkant, col. 0 lhs
Steekproeven/Pixel: 1
Rijen/Strook: /> VlakConfiguratie 2376TYPE:
C:\Users\ddecker\Desktop\D ad \ tiffs \ filename2.tif: folder
TIFF bij compensatie 0x4aac
TYPE:
C:\Users\ddecker\Desktop\D ad \ tiffs \ filename3.tif: folder
TIFF bij het Type van compensatie0x8
Deeldossier: (0 = 0x0)/> de Breedte van het Beeld Resolutie 124 Beetjes/Steekproef: 8
de Regeling van de Compressie: Photometric Interpretatie van None
: RGB color
Software: de Steekproeven van „¼ "
/Pixel: 3
Rijen/Strook: /> VlakConfiguratie 55
The is als volgt:

Processing filename.tif
[FOUT]: Breedte voor filename2.tif niet found.
[FOUT]: Lengte voor filename2.tif niet found.
[FOUT]: Resolutie voor filename2.tif niet found.
[info]: filename2.tif werd niet verwerkt, teveel errors.
Processing filename3.tif
Error logboek saved.

So, fundamenteel, wanneer GEEN gegevens voor een verslag aanwezig zijn, het werkt, maar wanneer 1 of meer waarden (maar niet ALLEN) voor een verslag missen dat voor output nodig is, behandelt het het als geen errors.

Can iedereen wat licht op this.
afwierp
" codeBody "
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:
" notpretty "
$infile = „data.txt“;
#$infile = $batOutput;

## (de open) Handvatten van het Dossier van de output
open (OUT1, „> \!“. $state.$status. „INFO.txt“) of sterven „kunnen geen \ openen!“. $state.$status. „INFO.txt: $! “; 
open (OUT2, „> \!“. $state.$status. „INFOspdsht.txt“) of sterven „kunnen geen \ openen!“. $state.$status. „$ INFO.txt! “;
open (ERRLOG, „> \! errors.log“) of sterf „kan niet openen! errors.log $! “;

## druk Kopballen aan spdshtdossier
druk OUT2 „; ; ; ; Whitespace; ; DPI ReSize; ; ; \ n“;
druk OUT2 „Filename; Comp; AlphCnl; Foto; Wid; Len; Onderzoek 0; x0; ; ; MB \ n“;

## de Gegevens van de configuratie voor het maskeren van gegevensoutput
mijn %config = (
    „LZW“ => „kleuren“,
    „Lempel-Ziv & het Welsh coderen“ => „kleuren“,
    „CCITT Groep 4“ => „bkwhts“,
    „CCITT Groep 4 facsimile het coderen“ => „bkwhts“,
    „Niets“ => „niets“,
    „niets“ => „niets“,
    „RGB kleur“ => „kleuren“,
    „min--wit“ => „bkwhts“,
    „min--zwarte“ => „bkwhts“,
    „RGB paletkleur (van colormap)“ => „kleuren“,
    Sub van de „resolutie“ => {
                                            mijn @r = verdeel (/,/, verschuiving);
                                            $r [0] =~ s \ D//g;
                                            $r [1] =~ s \ D//g;
                                            terugkeer @r [0.1];
    },
);

mijn @config = sleutels %config;

mijn $file = $infile; # plaats dit zoals nodig.

open mijn $fh, „<“, kan $file of de matrijs „geen <$file> voor lezings$ openen! “;

$ = „TYPE: \ n“;
terwijl (mijn $record = <$fh>) {
    chomp $record;
    als daarna $record eq '';
    $record =~ s (de Folder van TIF bij compensatie. +) \ n;
	
	## toekomstig gebruik, voor het verhogen van fouten
	$errorCount = 0;

    mijn ($fullpath, $data) = verdeel (/\ n, $record, 2);
    $fullpath =~ s: $;

    mijn ($drv, $path, $file) = Dossier:: Spec->splitpath ($fullpath);

	## krijg de gegevens van de Regeling van de Compressie
	$cs = $config {$1} als (de Regeling van de $data=~ s \ s {2} Compressie: \ s+ (. *?)\ n);
	als (! bepaalde $cs) {
		druk „[FOUT]: De gevonden niet Regeling van de compressie voor $file. \ n“;
		druk ERRLOG „[FOUT]: De gevonden niet Regeling van de compressie voor $file. \ n“;
		$errorCount++;
		#next;
	}	
 	
 	## krijg Photometric gegevens van de Interpretatie
 	$pi = $config {$1} als ($data=~ s \ s {2} Photometric Interpretatie: \ s+ (. *?)\ n);
    als (! bepaalde $pi) {
    	druk „[FOUT]: Photometric gevonden niet Interpretatie voor $file. \ n“;
    	druk ERRLOG „[FOUT]: Photometric gevonden niet Interpretatie voor $file. \ n“;
    	$errorCount++;
    	#next;
    }
    
    ## krijg de gegevens van Beetjes/Steekproef
    $bits = $1 als ($data=~ s \ s {2} Beetjes \ /Sample: \ s+ (. *?)\ n);
    als (! bepaalde $bits) {
    	druk „[FOUT]: De gevonden niet gegevens van beetjes/Steekproef voor $file. \ n“;
    	druk ERRLOG „[FOUT]: De gevonden niet gegevens van beetjes/Steekproef voor $file. \ n“;
    	$errorCount++;
    	#next;
    }
    
    ## krijg Steekproeven/de gegevens van het Pixel
    $pixels = $1 als ($data=~ s \ s {2} Steekproeven \ /Pixel: \ s+ (. *?)\ n);
    als (! bepaalde $pixels) {
    	druk „[FOUT]: De gevonden niet steekproeven/gegevens van het Pixel voor $file. \ n“;
    	druk ERRLOG „[FOUT]: De gevonden niet steekproeven/gegevens van het Pixel voor $file. \ n“;
    	$errorCount++;
    	#next;
    }
    
    ## krijg Waarde AlphaChnl (beetjes * pixel)
    $alphachnl = $bits * $pixels;
    als ($alphachnl == 1) {
    	$alphachnl = „bkwhts“;
    }
    elsif ($alphachnl == 8) {
    	$alphachnl = „kleuren“;
    }
    elsif ($alphachnl == 24) {
    	$alphachnl = „doLOGO“;
    }
    anders {
    	$alphachnl = „unknwn“;
    }
    
    ## krijg de gegevens van de Resolutie
    mijn @r = $config {„Resolutie“} - > ($1) als ($data=~ s \ s {2} Resolutie: \ s+ (. *?)\ n);
    
    ## krijg de gegevens van de Breedte/van de Lengte
    mijn ($w, $l) = ($1, $2) als (de Breedte van het $data=~ s \ s {2} Beeld: (\ d+) de Lengte van het Beeld: (\ d+) \ n);
    
    ## breedte
	als (! bepaalde $w) {
		druk „[FOUT]: Gevonden niet breedte voor $file. \ n“;
		druk ERRLOG „[FOUT]: Gevonden niet breedte voor $file. \ n“;
		$errorCount++;
		#next;
	}

    ## lengte
	als (! bepaalde $l) {
		druk „[FOUT]: Gevonden niet lengte voor $file. \ n“;
		druk ERRLOG „[FOUT]: Gevonden niet lengte voor $file. \ n“;
		$errorCount++;
		#next;
	}
	
	## resolutie
	als (! bepaalde $r [0] || ! bepaalde $r [1]) {
		druk „[FOUT]: Gevonden niet resolutie voor $file. \ n“;
		druk ERRLOG „[FOUT]: Gevonden niet resolutie voor $file. \ n“;
		$errorCount++;
		#next;
	}	
		
	## krijg Grootte het dossier van van TIF (F)
	mijn $filesize = (- s $fullpath)/(1024 * 1024);
    mijn $size_in_mb = sprintf „%.2f“, $filesize;
    
    ## de Controle van de fout
    als ($errorCount > 0) {
    	druk „[info]: $file werd niet verwerkt, teveel fouten. \ n“;
    	daarna;
    }
    
    $data =~ s \ n$//;

	## ** voor het Zuiveren - Drukken aan het Scherm **
    ## druk $, toetreden („: “, $file, $cs, $bits, $pi, $w, $l, @r, $size_in_mb, „\ n“), $data,“ \ n ";
    druk „Verwerking $file \ n“;

    druk OUT1 $, treden toe („; “, $file, $cs, $bits, $pixels, $pi, $w, $l, @r, $size_in_mb, „\ n“), $data,“ \ n ";
    
    ## de Output van La
    als ($state eq „La“) {
    	druk OUT2 „$file; “, „$cs; “, „$alphachnl; “, „$pi; “, „$w; “, „$l; “, „$r [0]; $r [1]; ; ; “, „$size_in_mb; ; “, „\ '$batch; ; ; ; “, „begin; “, „$file; ; ; ; ; ; ; ; ; ; “, „$size_in_mb; “, „beweging; “, „$file; “, „gedaane $dir_root \ \; “, „\ n“;	
    }
    ## de Output van NM
    elsif ($state eq „NM“) {
    	druk OUT2 „$file; “, „$cs; “, „$alphachnl; “, „$pi; “, „$w; “, „$l; “, „$r [0]; $r [1]; ; ; “, „$size_in_mb; ; “, „\ '$batch; ; ; ; “, „begin; “, „$file; “, „$size_in_mb; “, „beweging; “, „$file; “, „gedaane $dir_root \ \; “, „\ n“;
    	daarna;
    }
    Output ## OK/UT
    elsif („O.K.“ $state eq || $state eq „UT“) {
    	druk OUT2 „$file; “, „$cs; “, „$alphachnl; “, „$pi; “, „$w; “, „$l; “, „$r [0]; $r [1]; ; ; “, „$size_in_mb; ; “, „\ '$batch; ; ; ; “, „begin; “, „$file; “, „$size_in_mb; “, „beweging; “, „$file; “, „gedaane $dir_root \ \; “, „begin; “, $file. „F; “, „beweging; “, $file. „F; “, „$dir_root \ \ gedaane \ \ TEMPdone; “, „\ n“;
    	daarna;
    }
    Output ## TX/WY
    elsif ($state eq „TX“ || $state eq „WY“) {
    	druk OUT2 „$file; “, „$cs; “, „$alphachnl; “, „$pi; “, „$w; “, „$l; “, „$r [0]; $r [1]; “, „beweging $dir_root \ \ $file $dir_root \ \ $cs \ \ $file; ; “, „$size_in_mb; ; “, „\ '$batch; ; ; “, „begin; “, „$dir_root \ \ $cs \ \ $file; “, „$file; “, „$size_in_mb; “, „beweging; “, „$dir_root \ \ $cs \ \ $file; “, „gedaane $dir_root \ \; “, „begin; “, $file. „F; “, „beweging; “, $file. „F; “, „$dir_root \ \ gedaane \ \ TEMPdone; “, „\ n“;
    	daarna;
    }
    elsif ($state eq „NIETS“ || $state eq“--„ || $state eq „ANDERE“) {
    	druk OUT2 „$file; “, „$cs; “, „$alphachnl; “, „$pi; “, „$w; “, „$l; “, „$r [0]; $r [1]; “, „$size_in_mb \ n“;
    	daarna;
    }
}

sluit (OUT1) of de matrijs „kan geen out1 sluiten: $! “; 
sluit (OUT2) of de matrijs „kan geen out2 sluiten: $! “; 
sluit (ERRLOG) of de matrijs „kan fouten geen logboek sluiten: $! “;
sluit ($fh) of de matrijs „kan geen $fh sluiten: $! “;

Antwoord : De kwestie van de Herhaling van Perl

Is het e-mailadres het ENIGE punt op dat memorandumgebied? I " m dat het is niet wedt, zodat zou u één of andere methode moeten hebben om te vinden dat E-mailadres op het gebied van het Memorandum, en AFAIK er geen builtin macroactie is die dat zal doen - u zult Regelmatige Uitdrukkingen moeten gebruiken, die een een tekstkoord/dossier kunnen evalueren en aan u een aangepast koord teruggeven, gebaseerd op de „uitdrukking“ u levert.

De code hieronder in bijlage zal dit doen. Enkel kleeft het exemplaar/die punten in een nieuwe StandaardModule (naam dat modulebasTextFunctions, of iets in die aard), en gebruikt dan de functie FindEmailInString om het eerste E-maildieadres terug te keren in het koord wordt gevestigd. Om te doen dat, veronderstellend u een Vorm hebt waarop het gebied van het Memorandum aanwezig is, kon u een knoop omvatten om de waarde te tonen:

Sub MyButton_Click ()
  Msgbox FindEmailInString (Me.YourMemoField)
Sub van het eind

Neem van nota de code voor die Regelmatige Uitdrukking hier uit John Nurick's uitstekende pagina kwam: http://www.j.nurick.dial.pipex.com/Code/index.htm

Meer over Regelmatige Uitdrukkingen lezen, zie ons eigen artikel van Patrick Matthew's op Ex Reg.: 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:
Overheidsfunctie FindEmailInString (StringToSearch als Koord) als Koord

Schemerige sExp als Koord

sExp = „\ B [a-z0-9. _%+-] +@ [a-z0-9. -] + \. [A-Z] {2.4} \ B“
FindEmailInString rgxExtract (StringToSearch, sExp)

De Functie van het eind
Overheidsfunctie rgxExtract (Facultatief Doel ByVal als Variant, _
    Facultatief Patroon als Koord = "", _
    Facultatief Punt ByVal zoals lang = 0, _
    Facultatieve CaseSensitive zoals Van Boole = Vals, _
    Facultatieve FailOnError zoals Van Boole = Waar, _
    Facultatief duur Van Boole voort = Vals) _
  Als Variant
   
  'Regelmatige uitdrukkings passende functie geschikt voor gebruik
  'in VB/A over het algemeen en in de vragen van de Toegang.
  'Door John Nurick. Bijgewerkt 14 Januari 06.
   
  'Neemt een onderzoekskoord (Doel) en een regelmatige uitdrukking
  '(Patroon), en een facultatief argument van het Punt.
  '- Als het Punt en het substring van de gelijkenPatroon van het Doel wordt weggelaten,
  '  winst dat het substring.
  '- Als het Patroon groeperingshaakjes, het substring van Doel omvat
  '  het gelijkenPatroon, en het Punt zijn een geheel, terugkeren submatch
  '  gespecificeerd door Punt (eerst submatch is punt 0). Als er niet zijn
  '  genoeg submatches, winst verklaren nietig. Negatieve waarden van het begin van het Punt
  '  tellend met laatste submatch.
  '- Als geen gelijke, winst nietig verklaart.
  '- De Winst verklaart op fout nietig tenzij FailOnError Waar is.
  '  Altijd gelijken tegenover het volledige Doel (d.w.z. Globaal en
  '  Multiline is Waar).
  
  'CaseSensitive gelijken ongeacht geval.
 
  'Duur controles of het gecompileerde voorwerp RegExp voort
  'blijft klaar in geheugen voor de volgende vraag aan
  'functie of of het onmiddellijk wordt weggedaan. Dit
  'betekent de functie in vragen kan worden gebruikt zonder het hebben
  'om een nieuw voorwerp RegExp voor te creëren, te compileren te gebruiken en te vernietigen
  'elke rij die wordt verwerkt. Maar het betekent ook dat het voorwerp
  'blijft in geheugen nadat de vraag heeft gelopen. Om te vernietigen
  'heb bezwaar en geef het geheugen vrij, roepen deze functie 
  'laatste tijd zonder argumenten.
  '
  'Roepend de functie met verschillende argumenten (b.v. nieuw
  'Patroon) recompiles het voorwerp RegExp, zo
  de 'functie kan in verschillende vragen worden gebruikt. Nochtans daar
  'kan problemen zijn als twee draden de functie bij roepen
  de 'zelfde tijd.
 
  Const rgxPROC_NAME = „rgxExtract“
  Statisch erts als Voorwerp 'VBScript_RegExp_55.RegExp
    De 'statische verklaring betekent wij niet moeten creëren
    'en compileer het voorwerp RegExp elke enige tijd
    de 'functie wordt geroepen.
  Schemerige oMatches als Voorwerp 'VBScript_RegExp_55.MatchCollection
   
  Op Fout GoTo ErrHandler
  rgxExtract = Ongeldige 'Standaardterugkeerwaarde
    'NB: als FailOnError vals is, keert Ongeldig op fout terug
 
  Als IsMissing (Doel) toen
    'Dit is het signaal om erts weg te doen
    Vastgesteld erts = niets
    De Functie van de uitgang 'met standaardwaarde
  Eind als
   
  'Cre�ër indien nodig het voorwerp RegExp
  Als het erts dan niets is
    Plaats erts = CreateObject („VBScript.Regexp“)
  Beëindig als
 
  Met erts
    'Controle of de huidige argumenten (buiten Doel)
    'zijn verschillend van die opgeslagen in erts, en werken hen bij
    '(daardoor recompiling regex) slechts indien nodig.
    Als CaseSensitive = .IgnoreCase toen
      .IgnoreCase = niet .IgnoreCase
    Eind als
    . Globaal = Waar
    . Multiline = Waar
'    Als Multiline <> . Multiline toen
'      . Multiline = Multiline
'    Beëindig als
    Als Patroon <> . Patroon toen
      . Patroon = Patroon
    Eind als
 
  'Tenslotte, voer de gelijke uit
    Als IsNull (Doel) toen
      rgxExtract = verklaar nietig
    Anders
      Reeks oMatches = oRE.Execute (Doel)
      Als oMatches.Count > 0 toen
        Als oMatches (0) .SubMatches.Count = 0 toen
          'Geen () groep in Patroon: keer de gelijke terug
          Als Punt < 0="" Then="">= oMatches.Count
              Het 'positieve Punt overschreed het aantal gelijken
              rgxExtract = verklaar nietig
              Als FailOnError toen
                Err.Raise 9
              Eind als
            Geval anders
              rgxExtract = oMatches (Punt)
          Uitgezocht eind
         
        Anders  'Er zijn één of meerdere () gevangen groepen in Patroon
              'keer terug gespecificeerd door Punt
          Met oMatches (0) .SubMatches
            Als Punt < 0="" Then="">=. Telling
                Het 'positieve Punt overschreed het aantal submatches
                rgxExtract = verklaar nietig
                Als FailOnError toen
                  Err.Raise 9
                Eind als
              Aantal van het Punt van het geval anders het 'geldige
                rgxExtract =. Punt (Punt)
            Uitgezocht eind
          Eind met
        Eind als
      Anders
        rgxExtract = verklaar nietig
      Beëindig als
    Beëindig als
  Eind met
 
  'Ruim en normale uitgang op
  Als niet om dan voort te duren erts = niets plaats
  Ga Functie weg
 
ErrHandler:
  Als FailOnError toen
    Met vergis me
      Selecteer Geval. Aantal
        'Vervang het standaard „voorwerp-bepaalde fouten“ bericht
        Geval 9: . Beschrijving = „Subscript uit waaier (het gevraagde aantal van het Punt“ _
          & „was groter dan het aantal gevonden gelijken, of dan het aantal van“ _
          & „(...) groepeert/vangend haakjes in het Patroon).“
        Geval 13: . Beschrijving = de „wanverhouding van het Type, waarschijnlijk omdat“ _
          & het „"" argument van het Doel "" kon niet in een koord“ worden omgezet
        Geval 5017: . Beschrijving = de „fout van de Syntaxis in regelmatige uitdrukking“
        Geval 5018: . Beschrijving = „Onverwachte meer quantifier in regelmatige uitdrukking“
        Geval 5019: . De beschrijving = „dacht „]“ in regelmatige uitdrukking "
        Geval 5020: . De beschrijving = „dacht „)“ in regelmatige uitdrukking "
      Geval anders
        Als het erts is slaagde niets toen er niet in 'om tot voorwerp te leiden Regexp
          . De beschrijving = „kon tot geen voorwerp leiden VBScript.RegExp. “ & Err.Description
        Anders 'Onverwachte fout
          . Beschrijving = rgxPROC_NAME & „: “ &. Beschrijving
        Eind als
      Uitgezocht eind
      Vastgesteld erts = niets
      . Hef Err.Number op, rgxPROC_NAME, _
          rgxPROC_NAME & „(): “ &. Beschrijving
    Eind met
  'Anders ontbreek stil
    Err.Clear
    Vastgesteld erts = niets
  Eind als
De Functie van het eind
Andere oplossingen  
 
programming4us programming4us