Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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, 4964 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows Netzwerk
gelöst Probleme beim Erkennen eines identischen Servers (5)

Frage von DonDento zum Thema Windows Netzwerk ...

Exchange Server
EDB Postfach in PST Exportieren (33)

Frage von Herbrich19 zum Thema Exchange Server ...

Windows Installation
gelöst Portabel Apps erkennen oder sperren (5)

Frage von joehuaba zum Thema Windows Installation ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...