Veröffentlicht 11. Oktober 200420 j Hallo, ich habe hier einen Haufen Textdateien, die folgenden Aufbau haben: object 19 startdate=20011106 starttime=1430 endtime=1600 lank=1 reserve=1 level=0 event=plah detail=plah repeat=4 repeatlimit=1 entry=36 outflg=1 place=607 object dates _item=20011106 _item=20011120 _item=20011204 end end object 20 startdate=20011204 usw. Die Daten stehen auch so untereinander. Bei object fängt jeweils ein neuer Datensatz an. Diese Datensätze sollen in eine "richtige" Datenbank überführt werden. Dazu würde es schon reichen, wenn ich die die Felder eines Datensatzes in einer Zeile stehen hätte. Wie kann ich sowas auslesen und jeweils die Datensätze in eine eigene Zeile schreiben? Als Scriptsprachen stehen mir Shell und Python zur Verfügung. geli
13. Oktober 200420 j Ich versteh noch net ganz. Da sind Objekte in Objekten enthalten. Wie stellst du dir das dann vor?
16. Oktober 200420 j Wenn Du mir näher beschreiben könntest, was Du GANZ GENAU möchtest, könnte ich Dir ein Java Programm posten, was diese Kleinigkeit erledigen würde.
17. Oktober 200420 j So als Ansatz (Linux/bash)... #!/bin/sh function getValue() { VALUE=`echo $LINE | sed -e 's/^[^=]*=\(.*\)$/\1/'` } function isObject() { echo $LINE | egrep '^object\ .*$' > /dev/null } function endObject() { echo $LINE | egrep '^end$' > /dev/null } cat test.txt | ( LEVEL=0 OLINE=0 while read LINE do # Check: Object starts (object XYZ) # LEVEL erhoehen, Klammer oeffnen isObject && LEVEL=`expr $LEVEL + 1` && OLINE=1 && RESULT="${RESULT}(" # Check: Object ends (end) # LEVEL verringern, Klammer schliessen endObject && OLINE=1 && RESULT=`echo $RESULT | sed -e 's/^\(.*\),$/\1/'` && RESULT=`echo "${RESULT})"` && LEVEL=`expr $LEVEL - 1` # Value holen wenn es weder Object start noch end line war test $OLINE == 0 && getValue && RESULT="${RESULT}${VALUE}," # Wenn der Level 0 erreicht, ausdrucken und RESULT resetten test $LEVEL == 0 && echo $RESULT && unset RESULT # Object line tag resetten OLINE=0 done ) # sh parse.sh (20011106,1430,1600,1,1,0,plah,plah,4,1,36,1,607,(20011106,20011120,20011204)) (20011204)
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.