#!/bin/bash
# 2011.09.15
# Hasznalat: csv2zhk <filenev kiterjesztes nelkul>

# Szukseges file-ok:
# <filenev>.csv (Pontosvesszovel tagolt file tablazatkezelovel mentve, amelyben az adatok az olvassel.txt szerint szerepelnek. Ha kevesebb cella van, mint ahogy az az olvassel.txt-ben szerepel, az nem baj. Lehetnek a bejegyzesek idezojelben vagy szimpla idezojelben, az sem baj. Tizedespont helyett lehet tizedesvesszo.)
# <filenev>.kov (Felev kovetelmenyei, ahogy az olvassel.txt-ben szerepel.)

cat $1.csv |

# Dos line endings

sed 's/
//g' |

# Ures sorok nem kellenek

awk '$0!~/^$/ {print $0}' |

# Sor eleji '# vagy "# karakter cserelendo:

sed s/^\'\#/\#\'/g | sed s/^\"\#/\#\"/g |

# Tizedesvesszot pontra cserelunk:

awk -F\, '{
if ($1 !~ /^\#/) {
 for (i=1; i<NF; i+=1)  {
  if ($(i+1) ~ /^[0-9]/) printf($i".") ;
  if ($(i+1) !~ /^[0-9]/) printf($i",") ;
 }
 print($NF)
}

if ($1 ~ /^\#/) print($0);
}' |

# Idezojeleket es a |-ket kivesszuk:

awk -F\" '{
if ($1 !~ /^\#/) {
 for (i=1; i<NF; i+=1) printf($i) ;
 print($NF)
}

if ($1 ~ /^\#/) print($0);
}' |

awk -F\' '{
if ($1 !~ /^\#/) {
 for (i=1; i<NF; i+=1) printf($i) ;
 print($NF)
}

if ($1 ~ /^\#/) print($0);
}' |

awk -F\| '{
if ($1 !~ /^\#/) {
 for (i=1; i<NF; i+=1) printf($i) ;
 print($NF)
}

if ($1 ~ /^\#/) print($0);
}' |

# Minden bejegyzes elol vagy mogul kiszedjuk a vezeto/utolso spaceeket es tabokat:

awk -F\; '{
 for (i=1; i<NF; i+=1) {
	 sub(/^[ \t]+/, "", $i)
	 sub(/[ \t]+$/, "", $i)
	 printf($i";") 
 };
 sub(/^[ \t]+/, "", $NF)
 sub(/[ \t]+$/, "", $NF)
 print($NF)
}' |

# Most pedig beteszunk annyi pontosvesszot, amennyi kell:

awk -F\; '{
if ($1 !~ /^\#/) {
 for (i=1; i<4; i+=1) printf($i";");
 for (i=4; i<5+hfszam+3*zhszam+vizsgaszam; i+=1) #4 -tol kezdve kiszedjuk a space-eket minden oszlopbol.
 {
  c=split($i, s, " ")
  for (n=1; n<=c; n+=1) printf(s[n]);
  printf(";");
 }
 d=split($(5+hfszam+3*zhszam+vizsgaszam), t, " ")
 for (n=1; n<=d; n+=1) printf(t[n]);
 print("")
}

if ($1 ~ /^\#/) print($0);
}' `cat $1.kov` > $1.zhk
