[linux-l] [Lösung-II] awk
Olaf Radicke
briefkasten at olaf-radicke.de
Do Aug 4 08:18:53 CEST 2011
Peter Ross <Peter.Ross at bogen.in-berlin.de> hat am 4. August 2011 um 07:32
geschrieben:
> Aber ein Array als Parameter kann veraendert werden, nach meiner
> Ubuntu-Manpage [gawk, nehme ich an):
>
> Functions are passed expressions by value and arrays by
> reference. .. For example, csplit(s,A) puts each character of s
>into
> array A and returns the length of s.
>
> function csplit(s, A, n, i)
> {
> n = length(s)
> for( i = 1 ; i <= n ; i++ ) A[i] = substr(s, i, 1)
> return n
> }
>
Also, ich hab das hier versucht und das geht:
<code>
BEGIN{
Mensch["Perter", "Bauch"] = "leer"
Mensch["Perter", "Typ"] = "Fleischesser"
Mensch["Ulli", "Bauch"] = "Leer"
Mensch["Perter", "Vegetarier"] = "Fleischesser"
goToMcDonald("Peter")
goToMcDonald("Ulli")
stimmungsbild("Peter")
stimmungsbild("Ulli")
}
function goToMcDonald(_name)
{
if (Mensch[_name, "Typ"] == "Fleischesser" )
{
Mensch[_name, "Bauch"] = "voll"
}else
{
Mensch[_name, "Bauch"] = "leer"
}
}
function stimmungsbild(_name)
{
if (Mensch[_name, "Bauch"] == "voll" )
{
print _name " ist statt und zufrieden!"
}else
{
print _name " ist hungrig und stinksauer!"
}
}
</code>
Aber tatsächlich, das funktioniert auch:
<code>
BEGIN{
mittagspause()
}
function mittagspause(_peter)
{
_peter["Bauch"] = "leer"
_peter["Typ"] = "Fleischesser"
_uli["Bauch"] = "leer"
_uli["Typ"] = "Vegetarier"
print "vorher: Peter, bauch " _peter["Bauch"]
print "vorher: Uli, bauch " _uli["Bauch"]
goToMcDonald(_peter)
goToMcDonald(_uli)
print "nachher: Peter, bauch " _peter["Bauch"]
print "nachher: Uli, bauch " _uli["Bauch"]
}
function goToMcDonald(_mensch)
{
if (_mensch["Typ"] == "Fleischesser" )
{
_mensch["Bauch"] = "voll"
}else
{
_mensch["Bauch"] = "leer"
}
}
</code>
Super, wieder ein Riesen Schritt weiter...
Gruß
Olaf
Mehr Informationen über die Mailingliste linux-l