Leerer Parameter in Funktion

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von mjnet, 20.10.2009.

  1. #1 mjnet, 20.10.2009
    Zuletzt bearbeitet: 20.10.2009
    mjnet

    mjnet Grünschnabel

    Dabei seit:
    20.10.2009
    Beiträge:
    3
    Zustimmungen:
    0
    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:
    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") >> $filedone
    }

    #-----------------------------------------------------------------------
    # read every record (line) from .csv file
    #-----------------------------------------------------------------------
    while read LINE
    do
            field 
    `printf "%06d" $i` 7
        #---------------------------------------------------------------
        # fetch record from .csv
        #---------------------------------------------------------------
            field 
    `printf "$LINEgawk -';' '{ printf("%s", $1) }'` 9
            field 
    `printf "$LINEgawk -';' '{ printf("%s", $2) }'` 26
            field 
    `printf "$LINEgawk -';' '{ printf("%s", $3) }'` 41
            field 
    `printf "$LINEgawk -';' '{ printf("%s", $4) }'` 51
            field 
    `printf "$LINEgawk -';' '{ printf("%02d", $5) }'` 3
            field 
    `printf "$LINEgawk -';' '{ printf("%s", $6) }'` 8
            field 
    `printf "$LINEgawk -';' '{ printf("%s", $7) }'` 11
            field 
    `printf "$LINEgawk -';' '{ printf("%s", $8) }'` 16
            field 
    `printf "$LINEgawk -';' '{ printf("%s", $9) }'` 16
            field 
    `printf "$LINEgawk -';' '{ printf("%s", $10) }'` 11
            field 
    `printf "$LINEgawk -';' '{ printf("%s", $11) }'` 51
            field 
    `printf "$LINEgawk -';' '{ 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?
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 bytepool, 10.11.2009
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    ich hatte diesen Thread schon vor laengerem kurz ueberflogen, hatte aber nicht verstanden was du eigentlich willst. Jetzt hab ich's begriffen. ;)

    Ein einfacher Trick/Hack waere einfach beim Funktionsaufruf einen festen String mitzugeben, den du vor der Benutzung wieder abziehst:
    Code:
    function field() 
    {
        # strip 'a' from first parameter (if there is an 'a')
        var=${1#a} 
    }
    
    field a$(echo foo) bla blub
    
    So ist garantiert dass der erste Parameter bei Funktionsaufruf nie leer ist. Allerdings muss man dann auch darauf achten dass man immer 'a' beim Aufruf voran stellt, jedenfalls wenn 'a' auch in der Variable selbst vorkommen kann.

    Man kann den vorangestellten String je nach Art des Parameters natuerlich auch so waehlen dass es nicht dramatisch ist wenn man ihn weg laesst. Z.B. wenn die Variable eh numerisch ist, oder die Variable programmlogisch bedingt nie mit 'a' Anfangen kann.

    mfg,
    bytepool
     
Thema:

Leerer Parameter in Funktion

Die Seite wird geladen...

Leerer Parameter in Funktion - Ähnliche Themen

  1. Debian: Leerer Desktop

    Debian: Leerer Desktop: Hallo, nachdem ich es endlich hinter mich gebracht habe, Debian zu installieren (neben Win98) kommt wieder ein Problem auf. Musste ja so sein......
  2. [Gelöst] Suchen und ersetzen mit Hilfe mehrerer Parameter

    [Gelöst] Suchen und ersetzen mit Hilfe mehrerer Parameter: Hallo zusammen, ich bin an einem Punkt angekommen, wo ich nicht mehr weiter komme und hoffe ihr könnt mir weiter helfen. Anbei ein Ausschnitt aus...
  3. Parameternutzung in Funktionen

    Parameternutzung in Funktionen: Hallo, vielleicht hat jemand eine Idee. Es sollen UNIX-Kommandos aus einer Funktion heraus aufgerufen werden, die Optionen werden mit...
  4. UseFBDev-parameter bei der xorg.conf

    UseFBDev-parameter bei der xorg.conf: hallo zusammen ich frage mich gerade, was der parameter "UseFBDev" genau bedeutet? tönt irgendwie selbsterklärend, ist es aber scheinbar nicht......
  5. Nach Variable fragen wenn die nicht als Parameter eingegeben wurde

    Nach Variable fragen wenn die nicht als Parameter eingegeben wurde: Hallo, wie man aus dem Titel entnehmen kann, möchte ich dass man nach Argument gefragt wird, wenn man keinen eingetippt hat. zB ----------...