Első idézet magyarázata: Valószínűleg nem sokat kellene tanulnod az awk használatához. Van egy-két specifikum, de azt felszedi az ember menet közben.
Második idézet magyarázata: Csak úgy l'art pour l'art írogattam az awk szépségéről és hasznosságáról. Semmi bajom a C-vel.
Harmadik idézet magyarázata: Az indoklás elfogadható szintű. ;)
A soronkénti beolvasás tényleg lassabb. Ha tudjuk, hogy ASCII-artról van szó, akkor kell mondani egy gets()-t és máris ott csücsül a default 5k bufferben a szöveg. Ezt az oprendszer és a shell biztosítja. Az awk esetén is.
A "célfeladatra céleszköz", ok nézd meg a kódomat. Gyorstalpaló és egyszerűsített awk tanfolyam:
- Egy program 3 opcionális részből állhat: BEGIN{} {(body)} END{}
- A body minden beolvasott sorra végrehajtódik, amíg a sorok el nem fogynak.
- A length() függvény paraméter nelkül az $0 változó hosszát adja vissza, ami nem más, mint a beolvasott sor. Ezért is nem féltem 2x meghívni, mert ez a hossz már a beolvasáskor előáll.
- A numerikus változók 0 értékre inicializáltak. (Ide ennyi elég.)
Itt a vége. Ha eddig nem tudtad volna elolvasni a kódomat (amit azért nem hiszek), akkor máris menni fog.
Nem feledvén, hogy a programod jóval többet elvégez...
#include <stdio.h>
#include <string.h>
main()
{
int L=0,L1=0;
char Buffer[0x100];
while ( gets(Buffer) )
{
L1=strlen(Buffer);
if ( L1 > L )
L=L1;
}
}
Ez kb. az awk programnak megfelelő valami. Ebből vagy az awk-ból előállitva a programodat sokkal szebb lesz, és kb. ugyanannyi sorral kell kiegészíteni.. ;)
Az látszik, hogy a feladatot megoldva mindkét nyelven rövid a fejlesztési idő és hasonló az eredmény.
Bár nem ismerem a PowerMac-et, de mondjuk győztél. ;(