Pentru ca era o munca de chinez sa inversez manual ordinea fisierelor, am scris cateva randuri de cod care face aceasta treaba automat, 300 de fisiere dureaza in jur de 20 secunde la calculatorul meu, dimensiunea totala a celor 300 de fisiere fiind de aproximativ un giga, probabil ca fisierele mai mici vor fi inversate si mai repede.
Poate fi util si in ideea ca merge cineva sa scaneze si nu are pe cine sa intrebe care e inceputul cartii, poate scana linistit oricum si apoi inversa usor daca e cazul.
Daca i se mai intampla cuiva, fisierul de la linkul urmator rezolva treaba.
Trebuie doar pus fisierul in folderul cu pozele, apoi dat enter pe el, apoi sunt doua input box-uri care intreaba:
1. extensia fisierelor care se doresc inversate,
2. Directorul in care sa fie puse fisierele in ordine inversa. Directorul va fi creat in folderul in care este fisierul EXE si pozele sau orice alte fisiere de rearanjat.
Fisierele vor fi denumite sub forma:
0001.extensie
0002.extensie
.....
0010.extensie
0011.extensie
.....
0100.extensie
0101.extensie
.....
1000.extensie
1001.extensie
.....
Executabil pentru sortarea inversa a fisierelor dintr-un folder
Am scris codul in BGT, pun mai jos si sursa daca vrea cineva un exemplu. Codul este comentat, mai putin loopul care contine algoritmul de inversare, acesta putand fi inteles daca e cineva care se mai joaca cu programarea. De asemenea codul poate fi usor portat in alt limbaj, avand in vedere ca BGT nu este un limbaj general purpose.
Cod: Selectaţi tot
void main()
{
// cream o fereastra valabila pe durata procesului:
show_game_window("Inversare fişiere");
// intrebam extensia fisierelor de gasit care va fi scrisa fara punct in fata:
string extension=input_box("Extensia", "Scrieţi extensia fişierelor de inversat fără punct:");
// o variabila care va tine continutul unui fisier pana acesta va fi pus in fisierul nou:
string temp="";
// pentru a denumi cu un numar de zerouri in fata astfel incat sa fie o ordonare alfabetica, cream o variabila care va fi ajustata in functie de numarul fisierului::
string prefix="";
// umplem un array cu toate fisierele gasite in folderul curent cu extensia scrisa:
string[] all_files=find_files("*."+extension);
// verificari daca e scrisa vreo extensie sau a fost gasit vreun fisier:
// daca nu s-a scris nimic la extensie:
if(extension=="")
{
alert("Eroare!", "Nu a fost scrisă o extensie.");
exit();
}
// daca nu e gasit nici un fisier:
if(all_files.length==0)
{
alert("Eroare!", "Nu au fost gasite fişiere cu extensia "+extension+".");
exit();
}
// intrebam numele directorului in care vor fi rearanjate fisierele:
string directory_name=input_box("Creare folder", "Scrieţi numele directorului în care să fie salvate fişierele în ordine inversă:");
// daca nu e scris nimic la folder, il denumim inversate:
if(directory_name=="") directory_name="Inversate";
// cream directorul:
directory_create(directory_name);
// cream un cronometru pentru a vedea cat a durat rearanjarea:
timer t;
// un for care va lua fiecare fisier in parte dupa un algoritm si il va muta in folderul creat cu numarul corespunzator:
for(int i=all_files.length()-1; i>=0; i--)
{
file f;
f.open(all_files[i], "rb");
temp=f.read(0);
f.close();
wait(5);
int j=all_files.length()-i;
// calcularea prefixului:
if(j<10) prefix="000";
else if(j>=10&&j<100) prefix="00";
else if(j>=100&&j<1000) prefix="0";
else prefix="";
// sfarsit calculare prefix.
file g;
g.open(directory_name+"//"+prefix+j+"."+extension, "wb");
g.write(temp);
g.close();
} // end for.
// un alert care anunta:
alert("Succes!", "Procesul a durat "+t.elapsed+" milisecunde.");
exit();
}