Portál AbcLinuxu, 15. července 2025 22:57


Dotaz: Jak načíst ručně zadanou hodnotu v cyklu, který čte soubor po řádcích?

28.11.2009 15:50 FrantaS | skóre: 12 | Hlučín
Jak načíst ručně zadanou hodnotu v cyklu, který čte soubor po řádcích?
Přečteno: 159×
Odpovědět | Admin
Tvořím skript, který zpracovává soubor řádek po řádku pomocí:

while read radek; do echo "Zpracovat?; read radek2; if ....; volani funkce taky s read line; done < soubor

Pro načtení ručně zadané hodnoty se read uvnitř nevykoná. Chtěl bych použít read ještě v dalších funkcích, ale samozřejmě ani tam nefunguje. Jak to řešíte, prosím?
Ať se nám daří.

Řešení dotazu:


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

Odpovědi

Řešení 1× (FrantaS (tazatel))
28.11.2009 16:05 l4m4
Rozbalit Rozbalit vše Re: Jak načíst ručně zadanou hodnotu v cyklu, který čte soubor po řádcích?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Kde je jaká ručně zadaná hodnota? Standardní vstup celé té věci uvnitř while ... done je ze souboru soubor.

Chceš-li číst pomocí read pomíchaně z různých zdrojů, bude zapotřebí použít různé filedeskriptory. Demonstrace principu:
exec 5<soubor
read -u 5 line1
read -p "enter value>" value
read -u 5 line2
echo "line1 = $line1"
echo "line2 = $line2"
echo "value = $value
28.11.2009 16:19 FrantaS | skóre: 12 | Hlučín
Rozbalit Rozbalit vše Re: Jak načíst ručně zadanou hodnotu v cyklu, který čte soubor po řádcích?
while read radek; do
echo "Zpracovat?;
read radek2;    Rucně zadaná hodnota
if [ "$radek2" = "a" ]; then
...
fi
volani funkce taky s read line;
done < soubor
Díky, ale přiznám se, uniká mi smysl odpovědi. Načítat chci jen jeden soubor. Ručně zadaných hodnot potřebuji více.
Ať se nám daří.
28.11.2009 16:26 l4m4
Rozbalit Rozbalit vše Re: Jak načíst ručně zadanou hodnotu v cyklu, který čte soubor po řádcích?
Nechceš načítat jeden soubor. Chceš načítat standardní vstup a nějaký jiný soubor, a to napřeskáčku. Pokud to chápu,

read radek

má číst ze souboru a

read radek2

z terminálu. Ale když přesměruješ celé while ... done ze souboru, tak všechny read uvnitř čtou z toho souboru.
Řešení 1× (FrantaS (tazatel))
28.11.2009 16:28 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: Jak načíst ručně zadanou hodnotu v cyklu, který čte soubor po řádcích?
To ma za teba cele napisat? Si lenivy aspon vyskusat a zamysliet sa nad skoro hotovym riesenim, ktore si dostal pod nos? Prvy riadok otvori "soubor" a priradi mu deskriptor 5. Druhy riadok nacitava z deskriptoru 5 a treti nacitava "od uzivatela". Mas tam jasne ukazany princip, ze read sa da ovladat skade ma citat a nemusi stale iba z STDIN. Hlavna pointa je, pri tomto postupe zostava "soubor" stale otvoreny a opakovane volane read -u 5 ... vracia stale dalsi a dalsi riadok zo "souboru". Kdezto opakovane volany read a <soubor vracia stale 1. riadok, co vacsinou nebyva to co ludia bezne chcu.
If you hold a Unix shell up to your ear, you can you hear the C.
28.11.2009 19:28 FrantaS | skóre: 12 | Hlučín
Rozbalit Rozbalit vše Re: Jak načíst ručně zadanou hodnotu v cyklu, který čte soubor po řádcích?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Velmi děkuji. Myslím, že to bude stačit. Demonstrace principu a vynadání do bezvědomí :)) s perfektním popisem udělaly svoje a již jsem v demonstraci začal i něco vidět. ... Nechápu jak to, že jsem nic takového doposud nepotřeboval.
Ať se nám daří.

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.