1. leht 1-st

for i in <paarisridade sisu>; do ...

Postitatud: 10.06.2008, 21:01
Postitas v6lur
Käsk

Kood: Vali kõik

dcop amarok collection query "SELECT ALL t.title, t.artist FROM tags t WHERE t.title like '%$search%' ORDER BY t.title"
otsib Amaroki muusikakogust lugude pealkirjadest mustrit $search ning väljastab sellise jada:

Kood: Vali kõik

Otsingutulemusele vastav lugu nr 1
101
Lugu nr 2
874
Lugu 3
278
...
Lugu n
1667
Ehk siis esitajate nimede asemel on nende numbrilised ID-d. Need ID-d saab (ükshaaval) nimedeks käsuga

Kood: Vali kõik

dcop amarok collection query "SELECT DISTINCT t.name FROM artist t WHERE t.id like '<ID>'"
Siit küsimus: kuidas saab esimese käsu väljundis esitajate ID-d asendada nende nimedega (nii, et lugude pealkirjad jääks puutumata)? Kas "for i in list; do ..." saab rakendada ainult paarisnumbrilistele ridadele?

Või veel parem, kuidas saaks väljundi vormistada kujul

Kood: Vali kõik

Otsingutulemusele vastav lugu nr 1 (Esitaja 1)
Lugu nr 2 (Esitaja 2)
Lugu 3 (Esitaja 3)
...
Lugu n (Esitaja n)
?

Postitatud: 11.06.2008, 08:03
Postitas priit

Kood: Vali kõik

SELECT tags.title, artist.name FROM tags INNER JOIN artist ON tags.artist = artist.id WHERE tags.title LIKE '%$search%' ORDER BY tags.title;
Edit: nagu vist sul vaja
Selline bash skript

Kood: Vali kõik

#!/bin/bash
IFS='
'
array=(`dcop amarok collection query "select tags.title, artist.name from tags inner join artist on tags.artist = artist.id where tags.title like '%$1%' order by tags.title;"`)
len=${#array[*]}
i=0
while [ $i -lt $len ]; do
    echo -n ${array[$i]}
    echo -n " ("
    echo -n ${array[$i+1]}
    echo ")"
    let i=i+2
done
väljastab peale käsku

Kood: Vali kõik

sh test.sh Walk
minu arvutis sellised read:

Kood: Vali kõik

Walking Spanish (Tom Waits)
You'll Never Walk Alone (Johnny Cash)

Postitatud: 11.06.2008, 11:54
Postitas v6lur
Suur aitäh! :)