Kereskedelmi robotok - tömbök és gyűjtemények fájlkezelése

A QPILE nyelvén a programok létrehozásának folyamata során gyakran merül fel a változók mentése a lemezen. Ez például akkor szükséges, ha az adatokat különböző portfóliók között kicserélik, vagy ha az információkat egy portfólió egymást követő iterációi között tárolják.

A legegyszerűbb módja, ami eszébe jut, tekintettel a lehetséges rossz QPILE nyelv - az, hogy a vonal az összes adatot egy külső fájlt, például egy érték egy sorban vagy egy sorban, elválasztó értéket vesszőkkel, amely lényegében CSV formátum. Ezután ismeri az adatmegőrzés sorrendjét, elolvashatja azokat a mentési fájlból és felismerheti azokat.

Nagyon szomorú, a forrás szövege megdermed a szemem előtt. De ami a legfontosabb: a módszer nem univerzális. Minden alkalommal, amikor két elég nagy funkciót kell írni, amelyek közül az egyik a megfelelő sorrendben tárolja az adatokat, a másik ugyanabban a sorrendben olvassa fel őket. Ha valamit megváltoztatsz egyben, ki kell javítanod a második. Miután átment ez az eljárás, úgy döntöttem, hogy univerzális mechanizmust írok a jövőbeli felhasználásra.

Mint tudják, a QPILE - tömbök és gyűjtemények összes összesített adatai valójában egy sztringet képviselnek. Miért nem csak az ilyen típusú adatokat húrként mentheti? A legegyszerűbb teszt az asszociatív tömb létrehozása, a fájl írása, majd a fájl olvasása és összehasonlítása az eredeti verzióval. Az eredmény ugyanaz. A gyűjtésnél az eredmény nem kevésbé pozitív (miért nem lenne?).

A funkciók meg lettek írva. A probléma használata során. Az a kérdés, hogy a QPILE-ból lehet-e egy fájlba rögzíteni (gyakorlatilag) bármilyen hosszúságú, és itt csak 1 kilobájt lehet olvasni. Miért? Ez a tolmács természetes természete - a kérdés a kereskedőknek szól. Ezt a korlátozást meg kell akadályoznunk úgy, hogy egy hosszú sort osztunk részekre. Ennek eredményeként itt van néhány funkció:

„” „” „” „” „” „” „” „” „” „” „” „” „” „” „” „” „” „” „” „” „” „” „” „” „” '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Gyűjtemény vagy asszociatív tömb mentése egy fájlhoz
'A qpile korlátozásának legyőzés 1000 sorral egy sorban
'A sikeres befejezés után üres karakterláncot ad vissza hiba esetén a rendszerdiagnosztikai karakterláncnak
FUNC Save_Object (so_FileName, so_Object)
clear_file (so_FileName)
a so_count érték 0-tól lenig (so_Object) - 1
result = writeln (so_fileName, substr (so_Object, so_count, 1000))
ha 0 + get_value (eredmény, "RESULT") = 0
result = get_value (eredmény, "LEÍRÁS")
visszatérés
end ha
so_count = so_count + 999
véget ér
result = ""
END FUNC

„” „” „” „” „” „” „” „” „” „” „” „” „” „” „” „” „” „” „” „” „” „” „” „” „” '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Egy objektum olvasása fájlból. Egy asszociatív tömböt ad vissza
'RESULT - a fájl tartalma (objektum)
HIBA - hibakód. 0 - sikeres, 1 - hiba
FUNC Read_Object (ro_FileName)
ro_string = ""
eredmény = 0
ro_size = get_file_len (ro_FileName)
a so_count 1-től ro_size-ig
ro_string = ro_string read_line (ro_FileName, so_count, eredmény)
ha eredmény> 0
result = set_value (create_map (), "ERROR", eredmény)
visszatérés
end ha
véget ér
result = set_value (create_map (), "RESULT", ro_string)
END FUNC