Portál AbcLinuxu, 14. července 2025 08:41


Dotaz: Načítání dat v bashi z externího souboru.

6.4.2007 03:18 xDanxk
Načítání dat v bashi z externího souboru.
Přečteno: 251×
Odpovědět | Admin

Prosím předem omluvte velkou velikost tohot příspěvku, ale potřeboval bych poradit jak mám udělat, aby jména a měsíce byla do scriptu načítána za externího souboru. Případně zaslu celý skript. Předem moc krát děkuji.

ICQ 470 869 857

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

David Watzke avatar 6.4.2007 04:36 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Načítání dat v bashi z externího souboru.
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ten skript pastni sem a dej sem vygenerovaný odkaz. Netuším jak to myslíš, ale mrkni na help source.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
6.4.2007 08:31 ph0enix | skóre: 18 | Praha
Rozbalit Rozbalit vše Re: Načítání dat v bashi z externího souboru.
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zkus dat alespon odkaz na ten skript vystaveny nekde na webu tak jak uz zde bylo receno, jinak ti asi presne nikdo neporadi... Nacitat data ze souboru lze napriklad takto
cat jmeno_souboru | while read RADEK; do
  # zpracovani nacteneho radku ze souboru
  echo ">>${RADEK}<<"
done
6.4.2007 14:34 eh
Rozbalit Rozbalit vše Re: Načítání dat v bashi z externího souboru.
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zalezi na tom, co presne chces a taky na povaze dat. Ja kdyz muzu, tak si obvykle udelam neco takoveho:
---soubor---
zaznam 1
 jmeno Jarda
 prijmeni Novak
 mesic Leden
konec

zaznam 2
 jmeno Bohuslav
 prijmeni Martinu
 mesic Brezen
konec

zaznam 3
 jmeno Atd
 prijmeni Bla
 mesic zadny
konec
---soubor---
Pak si udelam ty 4 funkce zaznam, jmeno, prijmeni, mesic a konec (at uz delaji s daty cokoli) a do scriptu pak staci ten soubor jen sourcnout.. Davam to sem jen na ukazku jak se da udelat jednoduchy zaznamovy soubor s bashi ;)
6.4.2007 23:59 xDanxk
Rozbalit Rozbalit vše Re: Načítání dat v bashi z externího souboru.
Odpovědět | | Sbalit | Link | Blokovat | Admin

soubor je umístěn:

http://sweb.cz/xDanxk/svatek1

A potřeboval bych aby jmena mesíců a lidí byla načítana z externího souboru,

aby script mohl být pužitelný pro cizojazičný kalendář.

Předem mockrát díky

David Watzke avatar 7.4.2007 00:06 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Načítání dat v bashi z externího souboru.
No tak ty proměnný se jmény měsíců a lidí ulož do souboru a ten pak sourcuj...
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
7.4.2007 01:49 Andrej Herceg | skóre: 43
Rozbalit Rozbalit vše Re: Načítání dat v bashi z externího souboru.
Bude potrebné nadefinovať dve nové premenné:
soubor_mesice="mesice.cz"
soubor_data="data.cz"
Funkcia mesice() bude
function mesice()
{
	local IFS
	IFS=$'\n'
	mesic=($(cat $soubor_mesice))
	echo "${mesic[$1-1]}"
}
alebo
function mesice()
{
	mesic=($(cat $soubor_mesice))
	echo "${mesic[$1-1]}"
}
(to závisí od toho, či majú byť mená mesiacov na nových riadkoch, alebo budú v jednom riadku oddelené medzerou). Ak by sa tá funkcia mala volať viackrát, bolo by lepšie, keby sa ten riadok mesic=($(cat $soubor_mesice)) dal s tej funkcie von (aby sa ten súbor načítal iba raz).

Nakoniec sa upraví riadok
data="$(cat $soubor_data)"
9.4.2007 23:52 xDanxk
Rozbalit Rozbalit vše Re: Načítání dat v bashi z externího souboru.

Pochopil jsem te dobre? muzes se mi na to jeste podivat? Predem diky.

http://www.sweb.cz/xdanxk/

10.4.2007 14:53 Andrej Herceg | skóre: 43
Rozbalit Rozbalit vše Re: Načítání dat v bashi z externího souboru.
Najskôr tam treba nadefinovať premenné, v ktorých budú mená súborov s dátami. Teda treba na začiatok toho skriptu pridať
soubor_data="soubor_data.cz"
soubor_mesice="soubor_mesice.cz"
(pridal som tam príponu cz, takže bude treba tie dátové súbory premenovať [prípadne tie prípony odstrániť]).

Alebo sa vytvorí ešte jedna premenná, napr. jazyk. Do nej sa potom dá napr. "cz", "sk"... Potom by sa premenné s menami upravili
soubor_data="soubor_data."
soubor_mesice="soubor_mesice."
a neskôr by sa načítavali
mesic=($(cat $soubor_mesice$jazyk))

data="$(cat $soubor_data$jazyk)"
(ta premenná jazyk by sa menila podľa parametrov na prikazovom riadku). Ešte by bolo vhodné tam pridať test na to, či potrebné dátové súbory existujú.

Ešte si treba dať pozor na ukončenia riadkov (Windows/Unix) (totiž meno Zora nie je to isté ako Zora\r).
David Watzke avatar 10.4.2007 15:13 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Načítání dat v bashi z externího souboru.
V $(...) nepoužívejte cat, ale (rychlejší a lepší) <.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
10.4.2007 15:31 Andrej Herceg | skóre: 43
Rozbalit Rozbalit vše Re: Načítání dat v bashi z externího souboru.
[provokácia] Tá rýchlosť sa ukáže hlavne pri tom dvanásť riadkovom súbore. [/provokácia]

Pravda je, že < je lepšie riešenie. :)
13.4.2007 02:10 xDanxk
Rozbalit Rozbalit vše Re: Načítání dat v bashi z externího souboru.

Ja jsem z toho magor at delam co delam stejne

mi ten script nechodi jmena se mi proste nenacitaji....

Prosim te mohl by jsi mi to v tom skriptu upravit aby fungoval a poslat na mail?

Byl bych Ti moc vdecny

posledni verze je jako vzdy www.sweb.cz/xdanxk

13.4.2007 12:23 Andrej Herceg | skóre: 43
Rozbalit Rozbalit vše Re: Načítání dat v bashi z externího souboru.
Problém je v tom, že sa meno súboru pre názvy dní nastavuje neskôr ako sa použije.

V tých súboroch s menami je stále použité Windows ukončenie riadkov. Buď to treba zmeniť, alebo bude potrebné upraviť tie sed príkazy, aby s tým rátali.

Tu sú dve verzia. Prvá je len oprava. Druhá pridáva aj možnosť zmeny jazyka. Ako bonus som tam pridal aj súbor so slovenskými menami ;) Na načítanie parametrov by asi bolo vhodnejšie použiť program getopt. http://data2.edisk.cz/stahni/95454/svatky.tar.bz2_6.86kB.html
7.4.2007 09:40 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: Načítání dat v bashi z externího souboru.
Odpovědět | | Sbalit | Link | Blokovat | Admin
Označ tohle myší a prostředním tlačítkem zkopíruj do terminálu:
python << EOF
import gtk, urllib2

url = 'http://sweb.cz/xDanxk/svatek1'
handler = urllib2.urlopen(url)
svatky = {}
for line in handler:
    spl = line.split(None, 2)
    try:
        md = (int(spl[0]), int(spl[1]))
        svatky[md] = spl[2].split('|')
    except:
        pass

def day_selected(cal, buffer):
    y, m, d = cal.get_date()
    try:
        sv_text = '\n'.join(svatky[(m + 1,d)])
    except KeyError:
        sv_text = ''
    buffer.set_text(sv_text)

textview = gtk.TextView()
textview.set_editable(False)
buffer = textview.get_buffer()

cal = gtk.Calendar()
cal.connect('day-selected', day_selected, buffer)
cal.emit('day-selected')

vbox = gtk.VBox()
vbox.add(cal)
vbox.add(textview)
vbox.show_all()

window = gtk.Window()
window.set_title('svatky')
window.connect('delete-event', gtk.main_quit)
window.add(vbox)
window.show()
gtk.main()
EOF
Ovšem bude to fungovat pouze do chvíle, kdy ten soubor na své stránce změníš :-)
13.4.2007 08:02 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: Načítání dat v bashi z externího souboru.
Ovšem bude to fungovat pouze do chvíle, kdy ten soubor na své stránce změníš :-)
... což se evidentně stalo. Takže tady je upravená verze jen pro pořádek, abych zde nenechával nefunkční kód.
python << EOF
import gtk, urllib2

url = 'http://kf.fyz.fce.vutbr.cz/pub/svatky.txt'
handler = urllib2.urlopen(url)
svatky = {}
for line in handler:
    spl = line.split(None, 2)
    try:
        md = (int(spl[0]), int(spl[1]))
        svatky[md] = spl[2].split('|')
    except:
        pass

def day_selected(cal, buffer):
    y, m, d = cal.get_date()
    try:
        sv_text = '\n'.join(svatky[(m + 1,d)])
    except KeyError:
        sv_text = ''
    buffer.set_text(sv_text)

textview = gtk.TextView()
textview.set_editable(False)
buffer = textview.get_buffer()

cal = gtk.Calendar()
cal.connect('day-selected', day_selected, buffer)
cal.emit('day-selected')

vbox = gtk.VBox()
vbox.add(cal)
vbox.add(textview)
vbox.show_all()

window = gtk.Window()
window.set_title('svatky')
window.connect('delete-event', gtk.main_quit)
window.add(vbox)
window.show()
gtk.main()
EOF
13.4.2007 08:41 Kyosuke | skóre: 28 | blog: nalady_v_modre
Rozbalit Rozbalit vše Re: Načítání dat v bashi z externího souboru.
Nespletl sis dotaz? Otázka na Python byla přes chodbu, druhé dveře vlevo. ;-)
13.4.2007 11:02 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Načítání dat v bashi z externího souboru.
Klíd, to je jen taková malá pythonanie.
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
15.4.2007 04:50 Smazáno | skóre: 21 | blog: tezkorict
Rozbalit Rozbalit vše Re: Načítání dat v bashi z externího souboru.
Nebyl bys to ty aby to nebylo o pythonu, jak je daleko pyinit? ;)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.