2017-03-20 1 views
-2

Ich habe einige Bundes-pdf-Formulare mit gefüllten Daten init. Sagen wir zum Beispiel i765 und ich habe die Daten dieses Formulars in einem Textformat, mit ordnungsgemäß ausgefüllten Details. Wie kann ich die Daten aus diesem Formular mit minimalem Parsing extrahieren? Sagen wir mal, wie kann man ein Skript schreiben, das "Unterschied" identifiziert, was an sich nichts anderes ist als die gefüllte Information.Was ist der beste Weg, um gefüllte Daten aus einem statischen Formular zu extrahieren?

Für zB: Wenn eine Zeile enthält ..

SSN: (Leerzeichen) und die in Form gefüllt tatsächlich hat SSN: ABC @ # 456

so das ausgefüllte Information ist nichts anderes als ABC! @ # 456 was nur ein Unterschied zwischen den Strings ist. Gibt es einen bekannten Ansatz, dem ich folgen kann? Alle Hinweise werden sehr geschätzt.

+1

Wenn Sie Textversionen sowohl Quaders haben und form ausgefüllt, versuchen Sie dies in einer Shell aus: 'diff BlankFile.txt FileWithData .txt'. Gibt das, was Sie brauchen? Wenn ja, schreiben Sie ein Scala-Programm, das über die zwei Textdateien iteriert und die Daten vergleicht. Wenn Sie Schwierigkeiten haben, zeigen Sie Ihre Arbeit hier und wir werden Ihnen helfen. – radumanolescu

Antwort

0

Wenn wir reden über Linux-Tools, dann können Sie verschiedene Lösungen ausprobieren, wie:

$ join -t"=" -a1 -o 0,2.2 <(sort emptyform) <(sort filledform) # "=" is used as delimiter 

Oder auch awk ohne Sortieranforderungen:

$ awk 'BEGIN{FS=OFS="="}NR==FNR{a[$1]=$2;next}{if ($1 in a) {print;delete a[$1]}} \ 
END{print "\n Missing fields:";for (i in a) print i,a[i]}' empty filled 

Testing:

cat <<EOF >empty 
Name="" 
Surname="" 
Age="" 
Address="" 
Kids="" 
Married="" 
EOF 

cat <<EOF >filled 
Name="George" 
Surname="Vasiliou" 
Age="42" 
Address="Europe" 
EOF 
join -t"=" -a1 -o 0,2.2 <(sort empty) <(sort filled) 
#Output: 
Address="Europe" 
Age="42" 
Kids= 
Married= 
Name="George" 
Surname="Vasiliou" 

awk Ausgabe

awk 'BEGIN{FS=OFS="="}NR==FNR{a[$1]=$2;next}{if ($1 in a) {print;delete a[$1]}} \ 
END{print "\nnot completed fields:";for (i in a) print i,a[i]}' empty filled 

Name="George" 
Surname="Vasiliou" 
Age="42" 
Address="Europe" 

not completed fields: 
Married="" 
Kids="" 

Besonders in awk, wenn Sie den Druck von {if ($1 in a) {print;delete a[$1]}} entfernen, wird der END-Abschnitt nur die fehlenden Felder für Sie ausdrucken.

Eine weitere Alternative mit einem schönen visuellen Schnittstelle ist mit Diff:

$ diff -y <(sort empty) <(sort filled) 

Address=""       | Address="Europe" 
Age=""        | Age="42" 
Kids=""        | Name="George" 
Married=""       | Surname="Vasiliou"            
Name=""        < 
Surname=""       < 
+0

aktualisiert. Lassen Sie mich wissen, ob die obigen Lösungen geeignet sind. –

Verwandte Themen