Thread csv Datei mit BNF Steuerdatei parsen
(9 answers)
Opened by unaware at 2008-09-08 19:54
Hallo "community",
vielleicht hat jemand für mich einen Tip was ich genau suche ;-) vorneweg: Ich bin nicht der Hardcore-Programmierer, und perl liest sich für mich momentan eher wie klingonisch als wie eine leicht verständliche Programmiersprache ... aber das mag sich ja noch ändern. Ich habe folgende Aufgabenstellung: ich möchte verschiedene csv "Nutzdaten" Dateien auf syntaktische Korrektheit prüfen. Die zugrunde liegende Definitionsdatei soll in einer (E)BNF Form den Dateinamen, sowie die Struktur und Syntax der Nutzdatendatei beschreiben, z.B. (siehe unten). das ganze soll in perl passieren (5.6.0) Um es mal "sehr top-down" zu formulieren: Es fehlt mir zwischen dem Funktionsaufruf .... syntaxcheck.pl definitionsdatei.ebnf TEMP1_IN_20080908_01.DAT ... und der Meldung: "file sucessfully verified" oder irgendwelche sinnigen prägnanten Fehlermeldungen, wie z.B. Syntaxerror in data row 123, field B03 (Fieldname): wrong b03_datatype Syntaxerror in data row 129, field B05 (Fieldname): wrong b03_value ... "nur noch" das Stückchen perl-code syntaxcheck.pl, welches das macht was ich brauche Hat da irgendjemand eine heiße Spur für mich? Ich kann mir fast kaum vorstellen, daß eine derartige Aufgabenstellung nicht schon mal da gewesen wäre ... ===================== DateiName = InterfaceName '_' InterfaceDirection '_' FN-Datum '_' FN-Sequenz '.' FN-Dateityp . InterfaceName = 'TEMP1' ; InterfaceDirection = 'IN' ; FN-Datum = DATE_format_01 ; (* Format: JJJJMMTT *) FN-Sequenz = Ziffer Ziffer ; (* [00..99] *) FN-Dateityp = 'DAT' ; (* -------------------------------------------------------------------- *) DataFile = Header {Body} Trailer ; Header = HeaderRecord NewLine ; Body = BodyRecord NewLine ; Trailer = TrailerRecord (NewLine | EndOfFile) ; HeaderSeperator = HS ; BodySeperator = BS ; TrailerSeperator = TS ; HS = '|' ; BS = ';' ; TS = '|' ; HeaderRecord = H01 HS H02 HS H03 HS H04 ; BodyRecord = B01 BS B02 BS B03 BS B04 BS B05 ; TrailerRecord = T01 TS T02 ; .... T01_Attributename = 'PROCESS_VERSION' T01_Comment = 'version number of generating process' T01_Datatype = VARCHAR(10) T01_Validity = mandatory T01_Value = * T02_Attributename = 'AN_DS' T02_Comment = 'count of data records in the file (exceptheader and except footer line)' T02_Datatype = NUMBER(5) T02_Validity = mandatory T02_Value = * /* definition von standard-datentypen VARCHAR(10) = xxxxxxxx ? NUMBER(5) = xxxxxxxxxxx ? |