Přihlásit
: [1]
   |   
: Parsovani textu  ( 4000 )
Premysl


« : October 13, 2010, 23:08:56 »

Ahoj, potrebuju napsat skript v Bashi. V promeny mam ulozenou vetu a z teto vety potrebuji ziskat vsecky slova. Nevite, jak na to co nejjednoduseji?

Peťoš
Global Moderator
Hero Member
*****

Karma: 188
: 6 712



« #1 : October 13, 2010, 23:13:58 »

Při návrhu každého algoritmu (a je jedno, jestli je to kuchyňský recept nebo počítačový program), musíš vycházet ze dvou věcí:
  • Vstupní data
  • Výstupní data
Vstupní data bychom měli -- větu v proměnné $VETA. Ovšem co víme o výstupní proměnné? Nic. Má to být v jedné proměnné, v N proměnných, co čísla (zahodit, počítat za slovo?). Co všechno můžeme očekávat za bílé znaky?

Do it or do not. There is no "try".

Peťošův repozitář je na adrese: http://petos.cz/rpms
Fotoblog: http://vzducholode.blogspot.com a http://petos.cz/category/fotky
Premysl


« #2 : October 14, 2010, 12:45:35 »

Srry

vstup je promena: veta="Ana ma jablko, ktere je cervene jablko." , co potrebuju, je spocitat četnost všech slov ve vete, napadlo me rozparsovat vetu do pole a nasledne spocítat četnosti. dik.
_dworkin


« #3 : October 14, 2010, 20:03:55 »

#!/bin/bash

veta=""
stara=""
slov=0

# zameni mezeru a tabulator za carku
veta=${veta//[\ \   ]/,} 
# odstraneni duplicitnich carek
while [ ${#veta} != ${#stara} ] ; do stara=${veta} ; veta=${veta//,,/,} ; done
# postupne zkracuje retezec od konce podle carek
stara=""
while [ ${#veta} != ${#stara} ] ; do
   stara=${veta}
   veta=${veta%,*}  # Od konce odstraní nejkraší část $veta, která odpovídá "e*" echo ${veta%e*}
   slov=`expr $slov + 1`
done

echo $slov
_dworkin


« #4 : October 14, 2010, 20:26:52 »

Aha... ty chces neco uplne jineho nez pocet slov... Mel bych se naucit cist.. :/
Navic to vypada, ze si to uz vyresil tak nic.. jinak modifikace (deli odzadu, jde to predelat):

#!/bin/bash

# Od konce odstraní nejkraší část $ctvrta, která odpovídá "e*" echo ${ctvrta%e*}
# Od konce odstraní nejdelší část $ctvrta, která odpovídá "e*" echo ${ctvrta%%e*}
# Od začátku odstraní nejkraší část $ctvrta, která odpovídá "*e" echo ${ctvrta#*e}
# Od začátku odstraní nejdelší část $ctvrta, která odpovídá "*e" echo ${ctvrta##*e}

veta="Ana ma jablko, ktere je cervene jablko."
stara=""
slov=0

# zameni mezeru a tabulator za carku
veta=${veta//[\ \   ]/,} 
# odstraneni duplicitnich carek
while [ ${#veta} != ${#stara} ] ; do stara=${veta} ; veta=${veta//,,/,} ; done
# postupne zkracuje retezec od konce podle carek
stara=""
while [ ${#veta} != ${#stara} ] ; do
   stara=${veta}
   veta=${veta%,*}  # Od konce odstraní nejkraší část $veta, která odpovídá "e*" echo ${veta%e*}
   slov=`expr $slov + 1`
   echo ${stara##*,} # Od začátku odstraní nejdelší část $ctvrta, která odpovídá "*e" echo ${ctvrta##*e}
done

echo $slov
: [1]
   |   
 
: