Hi everyone!
I manage an automatic warehouse, where there are trays with a certain number of items inside. I was trying to do a count with Julia, elaborating some csv files that I export from my management and that represent precisely the trays and their internal items.
The concept of the calculation is this: on a csv I have a tray for each row, on another csv I have a single cell of the tray for each row, which may or may not contain an article … and so, scrolling through the csv, I believe myself to be a dictionary where for each tray I count the number of cells with an article inside, and empty cells, so that I know how many trays there are with some article, or all empty, or all full. A simple count, there is nothing math except addition …
I would like to know what kind of defects the script I have made, since I had the idea of converting it to php, and running it from the command line (I have a windows 7 i5) I see more or less equal calculation times between julia and php … I don’t really understand, I expected to see the php equivalent spin much slower … what kind of mistakes do you think I could have made, such as to knock down the performances in this way?.
Many thanks to everyone for the tips.
This is my Julia script echo (elapsed time at the end of it):
c:\prg\julia>ptime julia robot2.jl
ptime 1.0 for Win32, Freeware - http://www.pc-tools.net/
Copyright(C) 2002, Jem Berkes <jberkes@pc-tools.net>
=== julia robot2.jl ===
Calcolo dizionario id locazione / fila ...
Calcolo dizionario nr vassoio / fila ...
Calcolo ...
Calcolo finale ...
nr totale vassoi ubicati = 1734
========================================
NumerositĂ totali e per fila : totali fila1 fila2 fila3 fila4
NumerositĂ vassoi con qualcosa : 583 128 164 113 178
NumerositĂ vassoi tutti pieni : 474 150 189 72 63
NumerositĂ vassoi tutti vuoti : 677 177 129 221 150
Execution time: 0.902 s
c:\prg\julia>
And this one is the echo from php (again , elapsed time at the end of it)::
c:\xampp\htdocs\robot>ptime php index.php
ptime 1.0 for Win32, Freeware - http://www.pc-tools.net/
Copyright(C) 2002, Jem Berkes <jberkes@pc-tools.net>
=== php index.php ===
Calcolo dizionario id locazione / fila ...
Calcolo dizionario nr vassoio / fila ...
Calcolo ...
Calcolo finale ...
nr totale vassoi ubicati = 1734n========================================
NumerositĂ totali e per fila : totali fila1 fila2 fila3 fila4
NumerositĂ vassoi con qualcosa : 583 128 164 113 178
NumerositĂ vassoi tutti pieni : 474 150 189 72 63
NumerositĂ vassoi tutti vuoti : 677 177 129 221 150
Execution time: 0.758 s
c:\xampp\htdocs\robot>
The Julia code is this one:
folderInput ="c:/vmswap/robot/tabelle"
folderOutput ="c:/vmswap/robot/"
function daFileAdArray(nomeTabella)
fn = folderInput * "/" * nomeTabella
st = open(fn) do file
read(file, String)
end
rows = split(st, "\r\n")
deleteat!(rows,1); #cancello prima riga nome campi
return rows
end
ubicazioni = daFileAdArray("TAUTOMAGLOC.TXT")
testaVassoi = daFileAdArray("TAUTOMAGVAS.TXT")
internoVassoi = daFileAdArray("TAUTOMAGVASDETT.TXT")
# cross vassoi ubicazioni
println("Calcolo dizionario id locazione / fila ...")
dictIdLocazioneFila= Dict()
for row in ubicazioni
if row>" "
s = split(row,";")
idLocazione = s[1]
ubicazione = s[8]
ubicaziones = split(ubicazione,".")
fila=ubicaziones[3]
dictIdLocazioneFila[idLocazione]=fila
end
end
println("Calcolo dizionario nr vassoio / fila ...")
dictVassoioFila = Dict()
for row in testaVassoi
if row>" "
s = split(row,";")
nrVassoio = s[1]
idLocazione = s[4]
if haskey(dictIdLocazioneFila, idLocazione)
fila = dictIdLocazioneFila[ idLocazione ]
dictVassoioFila[nrVassoio]=fila
end
end
end
println("Calcolo ...")
# ---------------------------------
indiceMasterSuSlave = 2
nrCellePerVassoio = Dict();
for row in internoVassoi
if row>" "
s = split(row,";")
codiceArticolo = s[4]
nrVassoio = s[indiceMasterSuSlave]
if haskey(dictVassoioFila, nrVassoio)
fila = dictVassoioFila[nrVassoio]
if haskey(nrCellePerVassoio, nrVassoio)
nrTotali, nrPiene, nrVuote = nrCellePerVassoio[ nrVassoio ]
else
nrTotali, nrPiene, nrVuote = [0,0,0]
end
nrTotali = nrTotali + 1
if codiceArticolo > ""
nrPiene = nrPiene + 1
else
nrVuote = nrVuote + 1
end
nrCellePerVassoio[ nrVassoio ] = [nrTotali,nrPiene,nrVuote]
end
end
end
# ---------------------------------
println("Calcolo finale ...")
vassoi= copy([])
for row in testaVassoi
s = split(row,";")
nrVassoio = s[1]
if haskey(nrCellePerVassoio, nrVassoio)
#println( nrVassoio, " = " , nrCellePerVassoio[nrVassoio] )
#print( nrVassoio, ", " )
push!(vassoi,nrVassoio )
end
end
println("nr totale vassoi ubicati = " , length(vassoi))
println("========================================")
# ---------------------------------
vassoiConQualcosa = copy([])
vassoiTuttiPieni = copy([])
vassoiTuttiVuoti = copy([])
vassoiConQualcosa_1 = copy([])
vassoiTuttiPieni_1 = copy([])
vassoiTuttiVuoti_1 = copy([])
vassoiConQualcosa_2 = copy([])
vassoiTuttiPieni_2 = copy([])
vassoiTuttiVuoti_2 = copy([])
vassoiConQualcosa_3 = copy([])
vassoiTuttiPieni_3 = copy([])
vassoiTuttiVuoti_3 = copy([])
vassoiConQualcosa_4 = copy([])
vassoiTuttiPieni_4 = copy([])
vassoiTuttiVuoti_4 = copy([])
for row in testaVassoi
s = split(row,";")
nrVassoio = s[1]
if haskey(nrCellePerVassoio, nrVassoio)
valoriPerVassoio = nrCellePerVassoio[ nrVassoio ]
filaVassoio = dictVassoioFila[nrVassoio]
if (valoriPerVassoio[2] > 0) && (!(valoriPerVassoio[1] == valoriPerVassoio[2]) )
#println( nrVassoio, " = " , nrCellePerVassoio[nrVassoio] )
#print( nrVassoio, ", " )
push!(vassoiConQualcosa,nrVassoio )
if filaVassoio == "F01"
push!(vassoiConQualcosa_1,nrVassoio )
end
if filaVassoio == "F02"
push!(vassoiConQualcosa_2,nrVassoio )
end
if filaVassoio == "F03"
push!(vassoiConQualcosa_3,nrVassoio )
end
if filaVassoio == "F04"
push!(vassoiConQualcosa_4,nrVassoio )
end
end
if valoriPerVassoio[2] == 0
#println( nrVassoio, " = " , nrCellePerVassoio[nrVassoio] )
#print( nrVassoio, ", " )
push!(vassoiTuttiVuoti,nrVassoio )
if filaVassoio == "F01"
push!(vassoiTuttiVuoti_1,nrVassoio )
end
if filaVassoio == "F02"
push!(vassoiTuttiVuoti_2,nrVassoio )
end
if filaVassoio == "F03"
push!(vassoiTuttiVuoti_3,nrVassoio )
end
if filaVassoio == "F04"
push!(vassoiTuttiVuoti_4,nrVassoio )
end
end
if valoriPerVassoio[2] == valoriPerVassoio[1]
#println( nrVassoio, " = " , nrCellePerVassoio[nrVassoio] )
#print( nrVassoio, ", " )
push!(vassoiTuttiPieni,nrVassoio )
if filaVassoio == "F01"
push!(vassoiTuttiPieni_1,nrVassoio )
end
if filaVassoio == "F02"
push!(vassoiTuttiPieni_2,nrVassoio )
end
if filaVassoio == "F03"
push!(vassoiTuttiPieni_3,nrVassoio )
end
if filaVassoio == "F04"
push!(vassoiTuttiPieni_4,nrVassoio )
end
end
end
end
tab = "\t\t"
println(" ")
println("NumerositĂ totali e per fila : ", "totali", tab ,"fila1",tab , "fila2",tab ,"fila3",tab ,"fila4")
println("NumerositĂ vassoi con qualcosa : ", length(vassoiConQualcosa), tab ,length(vassoiConQualcosa_1),tab , length(vassoiConQualcosa_2),tab ,length(vassoiConQualcosa_3),tab ,length(vassoiConQualcosa_4))
println("NumerositĂ vassoi tutti pieni : ", length(vassoiTuttiPieni), tab ,length(vassoiTuttiPieni_1), tab ,length(vassoiTuttiPieni_2),tab ,length(vassoiTuttiPieni_3),tab ,length(vassoiTuttiPieni_4))
println("NumerositĂ vassoi tutti vuoti : ", length(vassoiTuttiVuoti), tab ,length(vassoiTuttiVuoti_1),tab , length(vassoiTuttiVuoti_2),tab , length(vassoiTuttiVuoti_3),tab ,length(vassoiTuttiVuoti_4) )
The php equivalent code, i have translated from my Julia code, is this one:
<?php
$folderInput ="c:/vmswap/robot/tabelle";
$folderOutput ="c:/vmswap/robot/";
function daFileAdArray($nomeTabella) {
global $folderInput;
$fn = $folderInput . "/" . $nomeTabella;
$t = file_get_contents($fn);
$rows = explode("\r\n",$t);
array_shift($rows);
return $rows;
}
$ubicazioni = daFileAdArray("TAUTOMAGLOC.TXT");
$testaVassoi = daFileAdArray("TAUTOMAGVAS.TXT");
$internoVassoi = daFileAdArray("TAUTOMAGVASDETT.TXT");
# cross vassoi ubicazioni
echo "\nCalcolo dizionario id locazione / fila ...";
$dictIdLocazioneFila = [];
foreach($ubicazioni as $row) {
if($row>" ") {
$s = explode(";",$row);
$idLocazione = $s[0];
$ubicazione = $s[7];
$ubicaziones = explode(".",$ubicazione);
$fila=$ubicaziones[2];
$dictIdLocazioneFila[$idLocazione]=$fila;
}
}
echo "\nCalcolo dizionario nr vassoio / fila ...";
$dictVassoioFila = [];
foreach($testaVassoi as $row) {
if($row>" "){
$s = explode(";",$row);
$nrVassoio = $s[0];
$idLocazione = $s[3];
if (array_key_exists($idLocazione, $dictIdLocazioneFila)) {
$fila = $dictIdLocazioneFila[ $idLocazione ];
$dictVassoioFila[$nrVassoio]=$fila;
}
}
}
echo "\nCalcolo ...";
# ---------------------------------
$indiceMasterSuSlave = 1;
$nrCellePerVassoio = [];
foreach($internoVassoi as $row) {
if($row>" "){
$s = explode(";",$row);
$codiceArticolo = $s[3];
$nrVassoio = $s[$indiceMasterSuSlave];
if (array_key_exists($nrVassoio, $dictVassoioFila)) {
$fila = $dictVassoioFila[$nrVassoio];
if (array_key_exists($nrVassoio, $nrCellePerVassoio)) {
$x = $nrCellePerVassoio[ $nrVassoio ];
$nrTotali = $x[0];
$nrPiene = $x[1];
$nrVuote = $x[2];
} else {
$nrTotali = 0;
$nrPiene = 0;
$nrVuote = 0;
}
$nrTotali = $nrTotali + 1;
if($codiceArticolo > "") {
$nrPiene = $nrPiene + 1;
} else {
$nrVuote = $nrVuote + 1;
}
$nrCellePerVassoio[ $nrVassoio ] = [$nrTotali,$nrPiene,$nrVuote];
}
}
}
# ---------------------------------
echo "\nCalcolo finale ...";
$vassoi = [];
foreach($testaVassoi as $row) {
$s = explode(";",$row);
$nrVassoio = $s[0];
if (array_key_exists($nrVassoio, $nrCellePerVassoio)) {
$vassoi[]= $nrVassoio;
}
}
echo "\nnr totale vassoi ubicati = ".count($vassoi);
echo "n========================================";
# ---------------------------------
$vassoiConQualcosa = [];
$vassoiTuttiPieni =[];
$vassoiTuttiVuoti = [];
$vassoiConQualcosa_1 = [];
$vassoiTuttiPieni_1 = [];
$vassoiTuttiVuoti_1 = [];
$vassoiConQualcosa_2 = [];
$vassoiTuttiPieni_2 = [];
$vassoiTuttiVuoti_2 = [];
$vassoiConQualcosa_3 = [];
$vassoiTuttiPieni_3 = [];
$vassoiTuttiVuoti_3 = [];
$assoiConQualcosa_4 = [];
$vassoiTuttiPieni_4 = [];
$vassoiTuttiVuoti_4 = [];
foreach($testaVassoi as $row){
$s = explode(";",$row);
$nrVassoio = $s[0];
if (array_key_exists($nrVassoio, $nrCellePerVassoio)) {
$valoriPerVassoio = $nrCellePerVassoio[ $nrVassoio ];
$filaVassoio = $dictVassoioFila[$nrVassoio];
if(
($valoriPerVassoio[1] > 0) &&
(!($valoriPerVassoio[0] == $valoriPerVassoio[1]) )
) {
$vassoiConQualcosa[] = $nrVassoio ;
if($filaVassoio == "F01") {
$vassoiConQualcosa_1[] = $nrVassoio;
}
if($filaVassoio == "F02") {
$vassoiConQualcosa_2[] = $nrVassoio;
}
if($filaVassoio == "F03") {
$vassoiConQualcosa_3[] = $nrVassoio;
}
if($filaVassoio == "F04") {
$vassoiConQualcosa_4[] = $nrVassoio;
}
}
if($valoriPerVassoio[1] == 0){
#println( nrVassoio, " = " , nrCellePerVassoio[nrVassoio] )
#print( nrVassoio, ", " )
$vassoiTuttiVuoti[] = $nrVassoio;
if($filaVassoio == "F01") {
$vassoiTuttiVuoti_1[] = $nrVassoio;
}
if($filaVassoio == "F02") {
$vassoiTuttiVuoti_2[] = $nrVassoio;
}
if($filaVassoio == "F03") {
$vassoiTuttiVuoti_3[] = $nrVassoio;
}
if($filaVassoio == "F04") {
$vassoiTuttiVuoti_4[] = $nrVassoio;
}
}
if($valoriPerVassoio[1] == $valoriPerVassoio[0]) {
#println( nrVassoio, " = " , nrCellePerVassoio[nrVassoio] )
#print( nrVassoio, ", " )
$vassoiTuttiPieni[] = $nrVassoio;
if($filaVassoio == "F01") {
$vassoiTuttiPieni_1[] = $nrVassoio;
}
if($filaVassoio == "F02") {
$vassoiTuttiPieni_2[] = $nrVassoio;
}
if($filaVassoio == "F03") {
$vassoiTuttiPieni_3[] = $nrVassoio;
}
if($filaVassoio == "F04") {
$vassoiTuttiPieni_4[] = $nrVassoio;
}
}
}
}
$tab = "\t\t";
echo " ";
echo "\nNumerositĂ totali e per fila : ". "totali". $tab ."fila1".$tab . "fila2".$tab ."fila3".$tab ."fila4";
echo "\nNumerositĂ vassoi con qualcosa : ". count($vassoiConQualcosa). $tab .count($vassoiConQualcosa_1).$tab . count($vassoiConQualcosa_2).$tab .count($vassoiConQualcosa_3).$tab .count($vassoiConQualcosa_4);
echo "\nNumerositĂ vassoi tutti pieni : ". count($vassoiTuttiPieni). $tab . count($vassoiTuttiPieni_1). $tab .count($vassoiTuttiPieni_2).$tab .count($vassoiTuttiPieni_3).$tab .count($vassoiTuttiPieni_4);
echo "\nNumerositĂ vassoi tutti vuoti : ". count($vassoiTuttiVuoti). $tab .count($vassoiTuttiVuoti_1).$tab . count($vassoiTuttiVuoti_2).$tab . count($vassoiTuttiVuoti_3).$tab .count($vassoiTuttiVuoti_4) ;
?>
Ok, thanks again for advices.
Darione