M
mjnet
Grünschnabel
Guten Tag
Erstmal Hallo zusammen, bin gerade neu hier an Board und freue mich auf tolle Threads.
Stehe an einem dofen Problem:
Ich ziehe Werte aus einer .CSV Datei (mit ";" getrennt) und übergebe diese dann einer funktion, wo ich ein ";" und eine gewisse Anzahl (Anzahl=Statische Länge - Länge String) "\x00" anhänge.
Bash Skript:
Das Problem ist jetzt, wenn ein Record von der .CSV Datei leer ist, bekomme ich immer den 2. Parameter im Script zurück!
Bsp.: (field `printf "$LINE" | gawk -F ';' '{ printf("%s", $9) }'` 16) wird im Script zu 16. Also $1=$2!
Wie kann ich verhindern, dass wenn der Parameter $1 leer ist, nicht der eigentlich zweite Parameter $2 also Parameter $1 betrachtet wird?
Gruss mjnet
.
.
.
EDIT (autom. Beitragszusammenführung) :
.
Ok hab die Lösung in meinem Fall:
Einfach die beiden Parameter vertauschen, weil der einte Paramter muss ja immer >0 sein in meinem Fall.
Aber wie wäre es generell?
Erstmal Hallo zusammen, bin gerade neu hier an Board und freue mich auf tolle Threads.
Stehe an einem dofen Problem:
Ich ziehe Werte aus einer .CSV Datei (mit ";" getrennt) und übergebe diese dann einer funktion, wo ich ein ";" und eine gewisse Anzahl (Anzahl=Statische Länge - Länge String) "\x00" anhänge.
Bash Skript:
PHP:
#!/bin/bash
i=0
#-----------------------------------------------------------------------
# set IFS empty ("\n" fix)
#-----------------------------------------------------------------------
IFS=""
#-----------------------------------------------------------------------
# set binary database
#-----------------------------------------------------------------------
file="binary_db"
#-----------------------------------------------------------------------
# if binary database exist -> rm
#-----------------------------------------------------------------------
if [[ -e $file ]]; then
rm $file
fi
#-----------------------------------------------------------------------
# function to fill binary database
#-----------------------------------------------------------------------
function field() {
#---------------------------------------------------------------
# declare function parameter 1, 2
#---------------------------------------------------------------
field_value=$1';'
field_length=$2
#---------------------------------------------------------------
# identify number of "\x00" for every record
#---------------------------------------------------------------
zero=`echo $[$field_length-${#field_value}]`
#---------------------------------------------------------------
# write value of record (";" included)
#---------------------------------------------------------------
printf "$field_value" >> $file
#---------------------------------------------------------------
# write needed "\x00"
#---------------------------------------------------------------
for ((j=0;$j<$zero;j++)); do (printf "\x00") >> $file; done
}
#-----------------------------------------------------------------------
# read every record (line) from .csv file
#-----------------------------------------------------------------------
while read LINE
do
field `printf "%06d" $i` 7
#---------------------------------------------------------------
# fetch record from .csv
#---------------------------------------------------------------
field `printf "$LINE" | gawk -F ';' '{ printf("%s", $1) }'` 9
field `printf "$LINE" | gawk -F ';' '{ printf("%s", $2) }'` 26
field `printf "$LINE" | gawk -F ';' '{ printf("%s", $3) }'` 41
field `printf "$LINE" | gawk -F ';' '{ printf("%s", $4) }'` 51
field `printf "$LINE" | gawk -F ';' '{ printf("%02d", $5) }'` 3
field `printf "$LINE" | gawk -F ';' '{ printf("%s", $6) }'` 8
field `printf "$LINE" | gawk -F ';' '{ printf("%s", $7) }'` 11
field `printf "$LINE" | gawk -F ';' '{ printf("%s", $8) }'` 16
field `printf "$LINE" | gawk -F ';' '{ printf("%s", $9) }'` 16
field `printf "$LINE" | gawk -F ';' '{ printf("%s", $10) }'` 11
field `printf "$LINE" | gawk -F ';' '{ printf("%s", $11) }'` 51
field `printf "$LINE" | gawk -F ';' '{ printf("%c", $12) }'` 2
#---------------------------------------------------------------
# count ID +1
#---------------------------------------------------------------
((i++))
done < ./binary_db.csv.bak
Das Problem ist jetzt, wenn ein Record von der .CSV Datei leer ist, bekomme ich immer den 2. Parameter im Script zurück!
Bsp.: (field `printf "$LINE" | gawk -F ';' '{ printf("%s", $9) }'` 16) wird im Script zu 16. Also $1=$2!
Wie kann ich verhindern, dass wenn der Parameter $1 leer ist, nicht der eigentlich zweite Parameter $2 also Parameter $1 betrachtet wird?
Gruss mjnet
.
.
.
EDIT (autom. Beitragszusammenführung) :
.
Ok hab die Lösung in meinem Fall:
Einfach die beiden Parameter vertauschen, weil der einte Paramter muss ja immer >0 sein in meinem Fall.
Aber wie wäre es generell?
Zuletzt bearbeitet: