Shell i tablica struktur

Problemy dotyczące programowania.

Moderatorzy: Moderatorzy, Administratorzy

Awatar użytkownika
sanczol
Użytkownik
Posty: 415
Rejestracja: 2005-03-17, 21:21
Lokalizacja: Warszawa
Kontakt:

Shell i tablica struktur

Post autor: sanczol »

Mam takie pytanko. W jaki sposób sprawdzić długość tablicy przechowującej struktury. Wygląda to tak:

Kod: Zaznacz cały

function initGroups
{
        IFS_ORG=$IFS
        INFO="Informacja z pliku /etc/group"
        index=0

        cat /etc/group  | \
        while read row
        do
                IFS=":"
                set -A tab $row
                IFS=$IFS_ORG
                INFO[$index].name=${tab[0]}
                INFO[$index].id=${tab[2]}

                print -n "$index. "
                print "id=${INFO[$index].id}, name=${INFO[$index].name}"

                ((index++))
        done

        print "init size=${#INFO[*]}"
}

function printGroups
{
        size=${#INFO}
        print "size is $size"

        for ((index=0; index < size; index++))
        do
                print -n "$index. "
                print "id=${INFO[$index].id}, name=${INFO[$index].name}"
        done
}

initGroups
printGroups
Jeśli teraz odpalę program funkcja printGroups wypisze mi długość INFO ale łańcucha a nie wielkość tablicy struktur. Pętla w printGroups wypisuje jak należy ale podana wielkość tablicy nie odpowiada jej właściwej wielkości, wiec funkcja nie przechodzi przez wszystkie elementy.
Arch Linux
kernel current
Samsung RF711
HP Compaq nx7400 [EY508ES]
Awatar użytkownika
mina86
Moderator
Posty: 3343
Rejestracja: 2004-06-14, 21:58
Lokalizacja: Linux 5.x x86_64
Kontakt:

Re: Shell i tablica struktur

Post autor: mina86 »

A nie przez przypadek ${#tablica[@]}?
Zastrzegam sobie prawo nieanalizowania postów pisanych niepoprawną polszczyzną.
Post generated automatically by A.I. system code name ‘mina86’ in response to the previous one.
Awatar użytkownika
sanczol
Użytkownik
Posty: 415
Rejestracja: 2005-03-17, 21:21
Lokalizacja: Warszawa
Kontakt:

Re: Shell i tablica struktur

Post autor: sanczol »

mina86 pisze:A nie przez przypadek ${#tablica[@]}?
Wtedy wypisuje że tablica ma długość 0.
Arch Linux
kernel current
Samsung RF711
HP Compaq nx7400 [EY508ES]
Awatar użytkownika
mina86
Moderator
Posty: 3343
Rejestracja: 2004-06-14, 21:58
Lokalizacja: Linux 5.x x86_64
Kontakt:

Re: Shell i tablica struktur

Post autor: mina86 »

sanczol, błąd jest gdzie indziej. Zamień konstrukcję cat /etc/group | while ...; done na while ...; done </etc/group.

--dopisek--
Spróbuj coś takiego:

Kod: Zaznacz cały

initGroups() {
    index=0
    INFO=( )
    while IFS=: read name ignore id rest; do
        INFO[$index].name=$name
        INFO[$index].id=$id
        index=$(( !index + 1 ))
    done </etc/group
}

printGroups() {
    index=0
    while [ $index -lt ${#INFO[@]} ]; do
        printf '%2d: %4d %s\n' $index ${INFO[$index].id} ${INFO[$index].name}
        index=$(( $index + 1 ))
    done
}

initGroups
printGroups
Nie miałem możliwości przetestować, gdyż nie używam ksh, ale chyba będzie działać. Pozwoliłem sobie przerobić trochę kod, żeby ładniej wyglądał.
Ostatnio zmieniony 2008-02-24, 00:20 przez mina86, łącznie zmieniany 1 raz.
Zastrzegam sobie prawo nieanalizowania postów pisanych niepoprawną polszczyzną.
Post generated automatically by A.I. system code name ‘mina86’ in response to the previous one.
ODPOWIEDZ