Roboți de tranzacționare - operațiunile de fișiere cu arhitecturi și colecții

În procesul de creare a programelor în limba QPILE, există adesea o problemă de salvare a oricăror variabile de pe disc. Acest lucru este necesar, de exemplu, atunci când se schimbă date între portofolii diferite sau când se stochează informații între iterațiile consecutive ale unui singur portofoliu.







Cel mai simplu mod care vine în minte, având în vedere potențialul unei limbi QPILE slabă - este de a menține linia de la toate datele într-un fișier extern, de exemplu, o valoare într-un rând sau într-o singură linie, care separă valorile cu virgule, având în esență format de date CSV. Apoi, cunoscând secvența în care au fost salvate datele, le puteți citi din fișierul de salvare și le puteți recunoaște.

Foarte deranjat, textul sursă se umflă în fața ochilor mei. Dar cel mai important - metoda nu este universală. De fiecare dată când trebuie să scrieți două funcții destul de mari, dintre care unul salvează datele în ordinea corectă, celălalt în aceeași ordine le citește. Schimbând ceva într-unul, este necesar să corectezi al doilea. Odată ce am trecut prin această procedură, am decis să scriu un mecanism universal pentru utilizare ulterioară.

După cum știți, toate datele agregate din QPILE - matrice și colecții reprezintă de fapt un șir. De ce nu salvați doar aceste tipuri de date ca șiruri de caractere? Cel mai simplu test este să creați o matrice asociativă, să o scrieți într-un fișier, apoi să citiți dintr-un fișier și să o comparați cu cel original. Rezultatul este același. Pentru colectare, rezultatul nu este mai puțin pozitiv (de ce nu ar fi?).







Funcțiile au fost scrise. În procesul de utilizare a problemei. Problema este că din QPILE este posibil să se noteze într-un fișier o linie (practic) de orice lungime, iar aici este posibil să se citească numai 1 kilobyte. De ce? Aceasta este proprietatea naturală a interpretului - întrebarea este adresată dealerilor. Va trebui să evităm această limitare prin împărțirea unei linii lungi în părți. Ca rezultat, iată câteva funcții:

„“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ '' '' '' '"" "" "
"Salvarea unei colecții sau a unei matrice asociative într-un fișier
"Depășirea limitei de qpile cu 1000 de caractere într-o singură linie
"La finalizarea cu succes, un șir gol este returnat, pe eroare, șirul cu diagnosticarea sistemului
FUNC Save_Object (so_FileName, so_Object)
clear_file (so_FileName)
pentru so_count de la 0 la len (so_Object) - 1
rezultatul = writeln (so_fileName, substr (so_Object, so_count, 1000))
dacă 0 + get_value (rezultat, "RESULT") = 0
rezultat = get_value (rezultat, "DESCRIPTION")
întoarcere
sfârșit dacă
so_count = so_count + 999
sfârșit pentru
rezultat = ""
END FUNC

„“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ '' '' '' '"" "" "
'Citirea unui obiect dintr-un fișier. Returnează o matrice asociativă
'RESULT - conținutul fișierului (obiect)
"EROARE - cod de eroare. 0 - succes, 1 - eroare
FUNC Read_Object (ro_FileName)
ro_string = ""
rezultat = 0
ro_size = get_file_len (ro_FileName)
pentru so_count de la 1 la ro_size
ro_string = ro_string read_line (ro_FileName, so_count, rezultat)
dacă rezultatul este> 0
rezultatul = set_value (create_map (), "ERROR", rezultat)
întoarcere
sfârșit dacă
sfârșit pentru
rezultat = set_value (create_map (), "RESULT", ro_string)
END FUNC







Trimiteți-le prietenilor: