Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Zeichenkette erkennen und exportieren

Frage Microsoft Microsoft Office

Mitglied: 71455

71455 (Level 1)

03.06.2011, aktualisiert 16:34 Uhr, 5083 Aufrufe, 9 Kommentare

Bestimmt Zeichenketten aus TXT oder Excel exportieren und dann nach Dopplungen untersuchen

Hi!
Ich möchte aus einer per OCR hergestellten Datei (in Wirklichkeit werden es ca 500) die leider kein stringentes Erscheinungsbild haben (OCR halt) bestimmt Zeichenketten herausfiltern und exportieren.
z.B. alle Zeichenketten, die irgendwo einen 8stelligen Zahlencode enthalten.
Ich dachte da an: such mal alle Zeichenketten ** und schreib die in eine txt. Dann kann ich per DOPPELT die betreffenden Zellen bzw Nummern herausfinden.
Hat jemand eine Idee?

THX

Braingap
Mitglied: Pjordorf
03.06.2011 um 16:58 Uhr
Hallo,

Zitat von 71455:
Hat jemand eine Idee?
Die Frage ist mal wieder ein Klassiker. Ja, ich habe eine Idee. Sogar mehrere.

Eine idee ist du verwendest mal die Suche. Selbst hier im Forum wirst du einige Hundert Fragen und Antworten finden welche mit Suche(n) in Textdateien zu tun haben.

Gruß,
Peter
Bitte warten ..
Mitglied: Friemler
03.06.2011 um 18:04 Uhr
Hallo braingap,

ich habe hier mal eine Lösung in VBS erstellt, die einfachste Möglichkeit.
01.
Const ForReading = 1 
02.
Const ForWriting = 2 
03.
Const AsASCII    = 0 
04.
 
05.
If WScript.Arguments.Count > 2 Then 
06.
  Set objFSO    = CreateObject("Scripting.FileSystemObject") 
07.
  Set objInFile = objFSO.OpenTextFile(WScript.Arguments(0), ForReading, False, AsASCII) 
08.
  strContent    = objInFile.ReadAll 
09.
  objInFile.Close 
10.
   
11.
  Set objOutFile     = objFSO.OpenTextFile(WScript.Arguments(1), ForWriting, True, AsASCII) 
12.
  Set objPatternFile = objFSO.OpenTextFile(WScript.Arguments(2), ForReading, False, AsASCII) 
13.
  Set objRegExp      = New RegExp 
14.
  objRegExp.Global   = True 
15.
 
16.
  While not objPatternFile.AtEndOfStream 
17.
    objRegExp.Pattern = objPatternFile.ReadLine 
18.
    Set colMatches    = objRegExp.Execute(strContent) 
19.
   
20.
    For Each objMatch In colMatches 
21.
      objOutFile.WriteLine objMatch.Value 
22.
    Next 
23.
     
24.
    Set colMatches = Nothing 
25.
  Wend 
26.
   
27.
  objPatternFile.Close 
28.
  objOutFile.Close 
29.
End If
Den Quelltext z.B.als SearchPatternsInFile.vbs speichern.

Aufruf:
cscript /nologo  "SearchPatternsInFile.vbs" "Eingabedatei.txt" "Ausgabedatei.txt" "Suchmusterdatei.txt"
Die Suchmusterdatei.txt muss in jeder Zeile ein Suchmuster enthalten. Als Suchmuster werden die regulären Ausdrücke von VBS verwendet. Alle gefundenen Stellen werden in jeweils eine Zeile der Ausgabedatei.txt geschrieben.

Hier eine Übersicht über die Syntax der regulären Ausdrücke (aus der deutschen Version der Datei script56.chm (Sprachreferenz von VBS) von Microsoft übernommen; einen Link auf diese Datei findet man hier):

Zeichen Beschreibung
\ Markiert das folgende Zeichen als Sonder- oder wortgenaues (literales) Zeichen. Beispielsweise entspricht "n" dem Zeichen "n". "\n" entspricht einem Zeilenumbruchzeichen. Die Folge "\\" entspricht "\", und "\(" entspricht "(".
^ Entspricht dem Anfang der Eingabe.
$ Entspricht dem Ende der Eingabe.
* Entspricht dem vorhergehenden Zeichen kein oder mehrere Male. Beispielsweise entspricht "zo*" entweder "z" oder "zoo".
+ Entspricht dem vorhergehenden Zeichen ein oder mehrere Male. "zo+" entspricht beispielsweise "zoo", nicht aber "z".
? Entspricht dem vorhergehenden Zeichen kein- oder einmal. Beispielsweise entspricht "a?eu?" dem "eu" in "neuer".
. Entspricht allen Einzelzeichen außer einem Zeilenumbruchzeichen.
(Muster) Entspricht Muster und speichert die Entsprechung. Die übereinstimmende Teilzeichenfolge kann aus der sich ergebenden Matches-Auflistung unter Verwendung von Item [0]...[n] abgerufen werden. Verwenden Sie zum Abgleichen von in Klammern ( ) gesetzten Zeichen "\(" oder "\)".
x|y Entspricht entweder x oder y. Beispielsweise entspricht "sch|blau" entweder "sch" oder "blau". "(sch|b)lau" entspricht "schlau" oder "blau".
{n} n ist eine nicht negative Ganzzahl. Entspricht exakt n Mal. Beispielsweise entspricht "o{2}" nicht dem "o" in "Robert", jedoch den ersten beiden "o" in "Booooot".
{n,} n ist eine nicht negative Ganzzahl. Entspricht mindestens n Mal. Zum Beispiel entspricht "o{2,}" nicht dem "o" in "Robert", aber allen "o" in "Booooot". "o{1,}" ist äquivalent mit "o+". "o{0,}" ist äquivalent mit "o*".
{n,m} m und n sind nicht negative Ganzzahlen. Entspricht mindestens n und höchstens m Mal. Beispielsweise entspricht "o{1,3}" den ersten drei "o" in "Boooooot". "o{0,1}" ist äquivalent mit "o?".
[xyz] Eine Gruppe von Zeichen. Entspricht einem beliebigen der enthaltenen Zeichen. "[abc]" entspricht z. B. dem "a" in "fallen".
[^xyz] Eine Gruppe ausgeschlossener Zeichen. Entspricht allen nicht enthaltenen Zeichen. "[^abc]" entspricht z. B. dem "f" in "fallen".
[a-z] Ein Zeichenbereich. Entspricht allen Zeichen im angegebenen Bereich. Beispielsweise entspricht "[a-z]" allen alphabetischen Zeichen in Kleinschreibung des Bereichs "a" bis "z".
[^m-z] Ein ausgeschlossener Bereich an Zeichen. Entspricht allen Zeichen, die im angegebenen Bereich nicht enthalten sind. Zum Beispiel entspricht "[^m-z]" allen Zeichen, die im Bereich "m" bis "z" nicht enthalten sind.
\b Entspricht einer Wortgrenze, d. h. der Position zwischen einem Wort und einem Leerzeichen. "er\b" entspricht beispielsweise dem "er" in "neuer", nicht jedoch dem "er" in "verb".
\B Entspricht einer Nichtwortgrenze. "ee*r\B" entspricht dem "eer" in "leeren".
\d Entspricht einer Ziffer. Äquivalent zu [0-9].
\D Entspricht einer Nichtziffer. Äquivalent zu [^0-9].
\f Entspricht einem Seitenvorschubzeichen.
\n Entspricht einem Zeilenumbruchzeichen.
\r Entspricht einem Wagenrücklaufzeichen.
\s Entspricht beliebigen Leerräumen wie Leerzeichen, Tabulator, Seitenvorschub usw. Äquivalent zu "[ \f\n\r\t\v]".
\S Entspricht beliebigen Nichtleerräumen. Äquivalent zu "[^ \f\n\r\t\v]".
\t Entspricht einem Tabulatorzeichen.
\v Entspricht einem vertikalen Tabulatorzeichen.
\w Entspricht allen alphabetischen Zeichen einschließlich Unterstrich. Äquivalent zu "[A-Za-z0-9_]".
\W Entspricht allen nicht alphabetischen Zeichen. Äquivalent zu "[^A-Za-z0-9_]".
\Zahl Entspricht Zahl, wenn Zahl eine positive Ganzzahl ist. Ein Rückverweis auf gespeicherte Entsprechungen. "(.)\1" entspricht z. B. zwei aufeinander folgenden identischen Zeichen.
\n Entspricht n, wobei n ein oktaler Escape-Wert ist. Oktale Escape-Werte können 1, 2 oder 3 Stellen aufweisen. Beispielsweise entspricht sowohl "\11" als auch "\011" dem Tabulatorzeichen. "\0011" ist äquivalent zu "\001" & "1". Oktale Escape-Werte dürfen 256 nicht überschreiten, da andernfalls nur die ersten beiden Stellen den Ausdruck enthalten. Ermöglicht die Verwendung von ASCII-Codes in regulären Ausdrücken.
\xn Entspricht n, wobei n ein hexadezimaler Escape-Wert ist. Hexadezimale Escape-Werte können nur genau zwei Stellen aufweisen. "\x41" entspricht beispielsweise "A". "\x041" ist äquivalent zu "\x04" & "1". Ermöglicht die Verwendung von ASCII-Codes in regulären Ausdrücken.

Da Du nicht genauer spezifizieren konntest, nach was Du suchen willst, musst Du dich jetzt eben ein bisschen mit der Syntax von regulären Ausdrücken beschäftigen und Dir die Suchmusterdatei.txt selbst erstellen.

Der Ausdruck [0-9]+ würde z.B. alle Stellen finden, an denen die Ziffern 0 bis 9 in beliebiger Kombination mindestens einmal oder mehrmals hintereinander vorkommen. Es wird also 5 oder 738 oder auch 0471182595436 gefunden.

Der Ausdruck [0-9]{8} würde achtstellige Zahlen finden.

Gruß
Friemler
Bitte warten ..
Mitglied: 76109
04.06.2011 um 12:08 Uhr
Hallo braingap, Hallo Friemler!

Zitat von Friemler:
Der Ausdruck [0-9]+ würde z.B. alle Stellen finden, an denen die Ziffern 0 bis 9 in beliebiger Kombination mindestens
einmal oder mehrmals hintereinander vorkommen. Es wird also 5 oder 738 oder auch 0471182595436 gefunden.

Der Ausdruck [0-9]{8} würde achtstellige Zahlen finden.
Nur als Anmerkung. Findet aber auch die ersten 8 Stellen einer z.B. 10-stelligen Zahl

Ansonsten mit SubMatches (Suchmuster in Klammern) z.B.
01.
Set RE = New RegExp 
02.
 
03.
RE.Pattern = "(\d{8})\D"   'Nur 8 Ziffern + Nicht-Ziffer finden 
04.
 
05.
For Each Matches In RE.Execute(Text)	'Text = File.ReadAll 
06.
    Zahl = Matches.SubMatches(0) 
07.
Next
Textbeispiel: "xy12345678xy"

Matches.Value = "12345678x"
Matches.SubMatches(0).Value = "12345678"

Gruß Dieter
Bitte warten ..
Mitglied: bastla
04.06.2011 um 12:55 Uhr
Hallo Dieter!

Es wäre ev noch daran zu denken, dass die gesuchte Zahl am Ende der Datei ohne Zeilenschaltung steht (bzw, um Dein Textbeispiel zu variieren: "xy12345678") ...

Grüße
bastla
Bitte warten ..
Mitglied: 76109
04.06.2011 um 13:07 Uhr
Hallo bastla!

Stimmt! Und habe ich mal wieder bewusst außer Acht gelassen (Asche auf mein Haupt). Mir ging es lediglich um den Hinweis auf SubMatches

Dir entgeht aber auch nichts

Gruß Dieter
Bitte warten ..
Mitglied: bastla
04.06.2011 um 13:10 Uhr
Hallo Dieter!
Mir ging es lediglich um den Hinweis auf SubMatches
Hatte ich mir schon gedacht ...

Auf die Schnelle käme ich auf
RE.Pattern = "(|\D)(\d{8})(\D|)"
mit "SubMatches(1)" ...

Grüße
bastla
Bitte warten ..
Mitglied: 76109
04.06.2011 um 13:43 Uhr
Hallo bastla!

Wobei ersteres eigentlich unnötig ist
RE.Pattern = "(\d{8})(\D|)"
würde völlig ausreichen (immernoch SubMatches(0))

Gruß Dieter
Bitte warten ..
Mitglied: 76109
04.06.2011 um 13:44 Uhr
Hallo braingap!

Die Sache mit den Dubletten, könnte man so lösen:
01.
.... 
02.
Set RE = New RegExp 
03.
Set DT = CreateObject("Scripting.Dictionary") 
04.
 
05.
With RE 
06.
   .Global = True 
07.
  '.IgnoreCase = True 
08.
   .Pattern = "(\d{8})(\D|)" 
09.
End With 
10.
 
11.
For Each Matches In RE.Execute(Text) 
12.
    If Not DT.Exists("$" & Matches.SubMatches(0)) Then 
13.
        DT.Add "$" & Matches.SubMatches(0), 0 
14.
    End If 
15.
Next 
16.
   
17.
For Each Key In DT 
18.
    'File.WriteLine Mid(Key, 2) 
19.
Next
Wobei für den Dictionary-Exist-Test, dem Zahlenwert ein $-Zeichen vorangestellt wird, weil die Exist-Funktion mit reinen Zahlenwerten offensichtlich nicht funktioniert. Zumindest, haben das meine Test's ergeben.

Gruß Dieter
Bitte warten ..
Mitglied: 71455
04.06.2011 um 18:58 Uhr
Super und vielen Dank an alle!
Bitte warten ..
Ähnliche Inhalte
Datenbanken
SQL Update-Befehl mit Zeichenketten
gelöst Frage von TlBERlUSDatenbanken6 Kommentare

Hi, mein SQL ist etwas eingerostet und finde dazu nichts hilfreiches im Web. SQL-Server 2008 R2; Ist-Zustand: Datenbank-Spalte mit ...

Batch & Shell
Zeichenkette variable kürzen
gelöst Frage von snowdreamBatch & Shell2 Kommentare

Hallo zusammen, ich möchte einen String bearbeiten. Die Anzahl der Zeichen soll allerdings variabel sein, und genau hier komme ...

Batch & Shell
Ordner über Zeichenkette suchen
gelöst Frage von Bayman52Batch & Shell10 Kommentare

Hallo zusammen, nachdem ich jetzt schon ein Woche bastle und suche, brauche ich doch eure Hilfe. Ich habe schon ...

Festplatten, SSD, Raid
Wie erkenne ich ein RAID?
gelöst Frage von Hendrik2586Festplatten, SSD, Raid8 Kommentare

Guten Morgen an alle. :) Kurze Frage zum Thema Raid. Unser Server hat insgesamt 12 Platten á 450 GB. ...

Neue Wissensbeiträge
Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 6 StundenWindows 101 Kommentar

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 7 StundenSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 22 StundenInternet3 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 1 TagDSL, VDSL2 Kommentare

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Heiß diskutierte Inhalte
Netzwerkmanagement
Mehrere Netzwerkadapter in einem PC zu einem Switch zusammenfügen
Frage von prodriveNetzwerkmanagement21 Kommentare

Hallo zusammen Vorweg, ich konnte schon einige IT-Probleme mit Hilfe dieses Forums lösen. Wirklich klasse hier! Doch für das ...

TK-Netze & Geräte
VPN-fähige IP-Telefone
Frage von the-buccaneerTK-Netze & Geräte16 Kommentare

Hi! Weiss noch jemand ein VPN-fähiges IP-Telefon mit dem man z.B. einen Heimarbeitsplatz gesichert anbinden könnte? Habe nur einen ...

Windows Server
Anmeldung direkt am DC nicht möglich
Frage von ThomasGrWindows Server16 Kommentare

Hallo, ich habe bei unserem Server 2016 Standard ein Problem. Keine Ahnung wie das auf einmal passiert ist. Ich ...

Hardware
Links klick bei Maus funktioniert nicht
gelöst Frage von Pablu23Hardware16 Kommentare

Hallo erstmal. Ich habe ein Problem mit meiner relativ alten maus jedoch denke ich nicht das es an der ...