PDA

Vollständige Version anzeigen : regular expression


Angel-Knight
10.05.2004, 15:08
hi....


also mittlerweile bin ich mit meinem projekt soweit gekommen, das ich den text von word - dokumenten auslesen kann und bin jetzt dabei das suchen nach textstellen einzubauen.

ich hab das mit regular expression versucht, und dabei die einschränkung gestellt das 1. nur zahlen und 2. nur 8 stellige ziffernfolgen gesucht werden sollen. die gefundenen stellen sollen in eine textbox geschrieben werden.

an sich funkt das schon, nur das problem ist, dass wenn eine zahl mit mehr als 8 ziffern gegeben ist, das programm sich auch daraus die ersten. 8 holt.

ich will aber das zeichenfolgen mit mehr als 8 ziffern ignoriert werden und wirklich nur zahlen mit 8 ziffern genommen werden

hier noch der code:


Dim wrdWordapp As New Word.Application 'einrichten der word application
Dim wrdWorddocu As Word.Document 'einrichten eines dokumentes
Dim RegEx As System.Text.RegularExpressions.Regex 'prozess zum suchen in string (word - text)
Dim pat As String = "\d{8}" 'nur nach zahlen (\d) und nur eine länge von 8 zeichen ({8}) suchen

Try
wrdWordapp.Documents.Open(txtbOpenpath.Text) 'öffnet zu durchsuchenden text
wrdWorddocu = wrdWordapp.ActiveDocument 'legt das aktive dokument fest
txtb14number.Text = RegEx.Match(wrdWorddocu.Content.Text, pat).ToString 'überprüft den text auf zutreffende zeichenfolgen füllt damit die textbox
catch
end try


soa ich hoff ma jemand weiss rat... und teilt ihn mir aussnahmsweise mal mit....

(und lacht nicht über den code ich bin halt noch n n00b(praktikant)...)

Angel-Knight
19.05.2004, 14:31
ok ich geb die hoffnung net auf das sich doch mal jemand dazu durchringt mir zu helfen hier also ne neue frage:

ich habe eine arraylist in die ich ein par verzeichnisse geschrieben habe.
in der weiteren verarbeitung kommt ein dieser code vor

for each array in arraylist

processdirectory1(array) 'in diesem prozesswird in der arraylist ein array hinzugefügt
arraylist.remove(array) 'das abgearbeitete array wird gelöscht

next

nun bekomme ich aber die fehlermeldung das er nicht fortfahren kann, weil sich die arrayliste geändert hat, kann ich diesen fehler irgentwie umgehen?

er soll nähmlich alle einträge in der arraylist abarbeiten (um alle unterverzeichnisse zu ermitteln), wobei bei den unterverzeichnissen auch unterverzeichnisse sind, deren pfad in die arraylist geschrieben werden (um auch diese abzuarbeiten).

GernotMelichar
22.05.2004, 14:04
Original geschrieben von Angel-Knight
ok ich geb die hoffnung net auf das sich doch mal jemand dazu durchringt mir zu helfen hier also ne neue frage:

ich habe eine arraylist in die ich ein par verzeichnisse geschrieben habe.
in der weiteren verarbeitung kommt ein dieser code vor

for each array in arraylist

processdirectory1(array) 'in diesem prozesswird in der arraylist ein array hinzugefügt
arraylist.remove(array) 'das abgearbeitete array wird gelöscht

next

nun bekomme ich aber die fehlermeldung das er nicht fortfahren kann, weil sich die arrayliste geändert hat, kann ich diesen fehler irgentwie umgehen?

er soll nähmlich alle einträge in der arraylist abarbeiten (um alle unterverzeichnisse zu ermitteln), wobei bei den unterverzeichnissen auch unterverzeichnisse sind, deren pfad in die arraylist geschrieben werden (um auch diese abzuarbeiten).


Hallo,

sowas löst man normalerweise mit einer rekursiven Dateisuche.
Ich hab mal schnell was zusammengehackt:
Ist in C# ,ich weiß aber das Prinzip ist erkennbar.

mfg,

Meli


<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre>using System;
&nbsp;
namespace rekursiveDateisuche
{
/// &lt;summary&gt;
/// Zusammenfassung f&uuml;r Class1.
/// &lt;/summary&gt;
class Class1
{

/// &lt;summary&gt;
/// Der Haupteinstiegspunkt f&uuml;r die Anwendung.
/// &lt;/summary&gt;
[STAThread]
static void Main(string[] args)
{

//Aufruf der Methode.Starverzeichnis ist C:\
dateisuche(&quot;c:\\");

Console.ReadLine();
}
&nbsp;



public static void dateisuche(string pfad)
{

//Zuerst mal alle Verzeichnisse im Start-Ordner suchen
string []dirs = System.IO.Directory.GetDirectories(pfad);

//Falls Unterverzeichnisse vorhanden sind...
if(dirs.Length&gt;0)
{
//Alle unterverzeichnisse durchsuchen
for(int i=0;i&lt;dirs.Length;i++)
{
//Dateieintr&auml;ge in jedem Verzeichnis ermitteln
string []files = System.IO.Directory.GetFiles(dirs[i]);

//Dateieintr&auml;ge in der Console ausgeben
foreach(string f in files)
{
//Hier k&ouml;nnte der Code stehen, um die Datei Eintr&auml;ge zu bearbeiten

Console.WriteLine(f);
}

//Hier wird die Methode selbst wieder aufgerufen
//und das n&auml;chste Verzeichnis &uuml;bergeben
dateisuche(dirs[i]);
}
}
else
{
Console.WriteLine(&quot;Keine weiteren Unterverzeichnisse!");
}
&nbsp;
&nbsp;
&nbsp;
}

}
}
&nbsp;</pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

GernotMelichar
22.05.2004, 22:02
Ok, tut mir leid.Es hat sich ein kleiner Bug eingeschlichen.
Hier ist das richtige Code-Beispiel:

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre>using System;
&nbsp;
namespace rekursiveDateisuche
{
/// &lt;summary&gt;
/// Zusammenfassung f&uuml;r Class1.
/// &lt;/summary&gt;
class Class1
{

/// &lt;summary&gt;
/// Der Haupteinstiegspunkt f&uuml;r die Anwendung.
/// &lt;/summary&gt;
[STAThread]
static void Main(string[] args)
{

//Aufruf der Methode.Starverzeichnis ist C:\
dateisuche(&quot;c:\\&quot);

Console.ReadLine();
}
&nbsp;



public static void dateisuche(string pfad)
{

//Zuerst mal alle Verzeichnisse im Start-Ordner suchen
string []dirs = System.IO.Directory.GetDirectories(pfad);
//Dann alle Dateieintr&auml;ge im Verzeichnis
string []files = System.IO.Directory.GetFiles(pfad);
&nbsp;
//Datei-Eintr&auml;ge durchlaufen
foreach(string f in files)
{
//Hier k&ouml;nnte der Code stehen, um die Datei Eintr&auml;ge zu bearbeiten
//Hier im Beispiel Ausgabe an die Console
Console.WriteLine(f);
}

//Falls Unterverzeichnisse vorhanden sind...
if(dirs.Length&gt;0)
{
//Alle Unterverzeichnisse durchsuchen
for(int i=0;i&lt;dirs.Length;i++)
{
//Hier wird die Methode &quot;dateisuche&quot; selbst aufgerufen
//und das n&auml;chste Verzeichnis &uuml;bergeben

dateisuche(dirs[i]);
}
}
else
{
//Keine Unterverzeichnisse mehr vorhanden!
Console.WriteLine(&quot;Keine Unterverzeichnisse mehr gefunden!&quot);
}
&nbsp;
}

}
}
&nbsp;</pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

Servus,

Meli

Gast
24.05.2004, 11:58
oh, sowas bin ja doch nicht allein....

naja thx für den tipp, habs mal veruscht und klappt bis jetzt ganz gut.

hier noch der code:

'auflisten der aller word dateien im zielverzeichnis sammt allen unterverzeichnissen
Private Sub btnListFiles_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnListFiles.Click

lstbList.Items.Clear() 'leert die lisbox von allen elementen
oberklasse(txtbListPath.Text) 'beginnt den prozess zur auflistung aller worddateien, zieldirecotry ist dabei die textbox ListPatch
lblFocus.Focus() 'übergibt dem label dem focus (damit die buttons nicht mehr anvisiert sind

End Sub


'Zur auflistung der Word Dateien
Public Sub oberklasse(ByVal TargetDirectory As String)

Dim strVerzeichnisSuche() As String = System.IO.Directory.GetDirectories(TargetDirectory) 'zum durchsuchen nach verzeichnis
Dim strDatenSuche() As String = System.IO.Directory.GetFiles(TargetDirectory) 'zum durchsuchen nach daten
Dim strVerzeichnisInhalt As String 'verzeichnis was durchsucht wird

For Each strVerzeichnisInhalt In strDatenSuche 'für alle dateien im verzeichnis

If strVerzeichnisInhalt Like ("*.doc") Then 'nur worddateien berücksichtigen
lstbList.Items.Add(strVerzeichnisInhalt) 'alles zutreffende in die listbox schreiben
End If

Next 'mit nächster datei fortfahren

If (strDatenSuche.Length > 0) Then 'so lange noch (wenn überhaubt) unterverzeichnisse gefunden werden

For Each strVerzeichnisInhalt In strVerzeichnisSuche 'für jedes unterverzeichnis im verzeichnis
oberklasse(strVerzeichnisInhalt) 'prozess zur auflistung der worddateien beginnen
Next 'mit nächstem unterverzeichnis fortfahren

End If

End Sub

hoffe mal ist nich zu unübersichtlich, ich weiss nicht ob ich auf dem rechner einfach so programme instalieren darf(MOF code converter)

Angel-Knight
24.05.2004, 15:17
argh, hatte mich bei dem post net angemeldet....


naja hab n fehler gefunden beim zweiten if wo es heist:


If (strDatenSuche.Length > 0) Then

müsste es eigendlich heissen:

If (strVerzeichnisSuche.Length > 0) then

weil er sonst, sobald mal in einem unterordner keine files sind, diesen nicht nach weiteren unterordnern durchsucht