Ultima actualizare: 2022-12-06 Alt ghid util: https://hackfox.github.io/ === Setari/environment === -- Afisare ceas SET CLOCK ON -- Setare numar de zecimale (precizie) SET DECIMALS TO 10 -- Schimbare separator zecimale SET POINT TO "," -- Stergerea variabilelor de utilizator CLEAR MEMORY CLEAR ALL -- Afisarea variabilelor de utilizator SHOW MEMORY LIST MEMORY -- Toate datele si orele sunt implicit in format american adica mm/dd/yy si 12h hh:mm AM/PM. -- Adevarat si fals sunt reprezentate ca si .T. sau .F., respectiv. -- Diferenta dintre DISPLAY si LIST este ca DISPLAY umple ecranul apoi asteapta o apasare de tasta de la utilizator pana sa afiseze urmatorul ecran de informatii. LIST varsa absolut tot pe ecran chiar daca datele fac scroll in afara lui. === Declarare variabile === -- Numeric var = 10 -- String var = "Niste text" -- Data (format ISO8601 yyyy-mm-dd) var = {^2022-12-31} -- Array/tablou/vector DECLARE tbl[10] DIMENSION tbl[10] -- Matrice DECLARE mtx[10,10] -- Seteaza toate pozitiile din vector la ceva STORE 69 TO tbl -- Adauga text la pozitia 1 din vector tbl(1)="Niste text" -- Seteaza numere la coordonatele 2 si 3 din matrice mtx(2,3)=69 === Interogare/afisare === -- Continutul unei variabile ?var -- Continutul unei variabile (fara newline) ??var -- Continutul la mai multe variabile o data ?x,y,z -- Operatie matematica ?5/3 -- Continulul unui array (unde X indica pozitia) ?tbl(X) -- Comentariu (orice dupa && nu este interpretat ca si comanda) && Un comentariu, similar cu // din C. === Citire de la tastatura/stdin === -- String ACCEPT "Introduce text: " TO var -- Numeric INPUT "Introduce numar: " TO var -- Asteapta interactiune (apasare de tasta) WAIT "Apasa orice tasta" === Functii pe date numerice === sign(x) - semnul lui x (+-) abs(x) - valoarea absoluta a modulului mod(x,y) - operator modulo, restul impartirii int(x) - partea intreaga, numarul fara zecimale round(x,y) - rotunjire cu y zecimale sqrt(x) - radacina patratica/radical exp(x) - exponential log(x) - logaritm natural (ln) log10(x) - logaritm in baza 10 (log) sin/cos/tan/asin/acos - functiile trigonometrice === Functii pe date alfanumerice/string === asc(x) - caracter --> ASCII (primul caracter in cazul unui sir) chr(x) - ASCII --> caracter len(x) - lungimea unui string replicate(x,y) - repetarea lui x de y ori space(x) - returneaza sir de x spatii lower(x) - CuVaNt --> cuvant (schimbarea majusculelor in minuscule) upper(x) - CuVaNt --> CUVANT (schimbarea minusculelor in majuscule) proper(x) - "Aceasta este o propozitie" --> "Aceasta Este O Propozitie" (face prima litera a fiecarui cuvant sa fie mare) strtran("ceva","findString","replaceString",pozitie,ori) - echivalent cu functia find and replace la editoarele text. Primul parametru ia un sir, al doilea ce sa caute, al treilea cu ce sa il inlocuiasca, al patrulea de la ce aparenta sa inceapa, al cincilea la cate aparente dupa primul sa inlocuiasca. ?strtran("ana are mere mere mere","mere","pere",2,1) ana are mere pere mere === Functii pe data/ora === date() - afiseaza data curenta in format implicit (mm/dd/yy) datetime() - data si ora (mm/dd/yy hh:mm AM/PM) time() - doar ora (hh:mm AM/PM) day(x) - numarul zilei din luna (1-31) dow(x) - ziua numerica a saptamanii (Day Of Week, 1-7) cdow(x) - la fel dar numele zilei week(x) - numarul saptamanii month(x) - numarul lunii (1-12) cmonth(x) - la fel dar numele lunii year(x) - anul din x hours(x) - orele din x minute(x) - minutele din x sec(x) - secundele din x seconds() - secundele de azi, 00:00:00 pana in momentul prezent && Pe data/ora se pot face si operatii de adunare si scadere, && de exemplu ?DATE()-1 va afisa data de ieri, la fel functioneaza && si cu variabile care contin o data/ora. === Tabele === Orice tabel este reprezentat de un fisier .dbf si un singur tabel poate fi incarcat in memorie o data. -- Crearea si incarcarea unui nou tabel (fisierul se va numi numeTabel.dbf) CREATE numeTabel -- Schimbarea/setarea tabelului activ USE numeTabel -- Inchiderea tabelului curent (similar cu f.close() din C) USE -- Crearea unui nou tabel cu structura preluata din alt tabel (dar nu si valorile) CREATE tabelNou FROM tabelExistent -- Afisarea structurii DISPLAY STRUCTURE DISP STRU -- Modificarea structurii (arata o fereastra si nu ia argumente ca si comanda) MODIFY STRUCTURE MODI STRU -- Activarea accesului la campuri (implicit off) SET FIELDS ON -- Defineste la ce campuri are acces utilizatorul SET FIELDS TO listaCampuri -- Eliminarea accesului la orice camp SET FIELDS TO -- Adaugarea inregistrarilor interactiv APPEND -- Adaugarea unei inregistrare goale neinteractiv APPEND BLANK -- Copierea inregistrarilor (optional si campurile) din alt tabel APPEND FROM numeTabel [FIELDS listaCampuri] -- Adaugarea inregistrarilor interactiv (similar cu APPEND) INSERT [BEFORE] -- Adaugarea inregistrarilor neinteractiv (similar cu APPEND BLANK) INSERT BLANK [BEFORE] -- Inlocuieste inregistrari intr-o coloana spefica REPLACE [ALL] camp WITH valoare [FOR exp] [WHILE exp] -- Aratarea continuturilor tabelului activ interactiv (sinonime: EDIT, CHANGE) BROWSE [FIELDS listaCampuri] [FOR cond1] [WHILE cond2] [FONT cFontName] [STYLE cStyleCodes] [FREEZE numeColoana] [LAST/NOINIT] -- Clauza FIELDS (filtrare campuri) :R - campul poate fi doar vizualizat (Read-only) :V= - daca conditia e adevarata permite modificarea, altfel arata mesajul de eroare standard :E= - mesaj standard de eroare :W= - cursorul poate fi pus pe inregistrare doar daca conditia este adevarata -- Clauzele FONT, STYLE, FREEZE si LAST/NOINIT FONT - arata inregistrarile cu un anumit font STYLE - caracteristicile fontului (bold, italic, underline) FREEZE - permite modificari doar coloanei specificate LAST/NOINIT - deschide fereastra cu ultimele setari aplicate NOAPPEND - impiedica crearea a noi inregistrari NODETELE - impiedica marcarea inregistrarilor pentru stergere -- Arata doar campurile nume, prenume, salar si localitate, salar fiind imposibil de modificat BROWSE FIELDS nume,prenume,salar:R,localitate -- Arata doar campurile nume, pret, nume fiind imposibil de modificat si pret poate fi doar peste 100, in caz de eroare sa se afiseze "ghinion" BROWSE FIELDS nume:R,pret:V=pret>100:E="ghinion" -- Sari la o inregistrare (navigare tabel) GOTO TOP GOTO BOTTOM GOTO 123 GO 123 && Partea amuzanta este ca GOTO e singura comanda in limbaj unde comanda in sine && e optionala deci poti scrie doar un numar si FoxPro va sari la acea inregistrare. 123 -- Sari X inregistrari inainte sau inapoi (in cazul unui numar negativ) SKIP 5 SKIP -2 -- Sare la prima inregistrare gasita dupa o conditie logica (EOF daca nu e gasita) LOCATE FOR cond1 [WHILE cond2] LOCATE FOR ceva > 10 -- Sare la urmatoarea inregistrare gasita (EOF daca ai trecut de ultimul rezultat) CONTINUE -- Marcarea inregistrarilor pentru stergere ("logic") DELETE [SCOP] [FOR cond] [WHILE cond] -- Marcarea inregistrarii curente pentru stergere DELETE -- Demarcarea inregistrarilor de la stergere RECALL [SCOP] [FOR cond] [WHILE cond] -- Stergerea definitiva a inregistrarilor marcate ("fizic") PACK -- Stergerea a tuturor inregistrarilor definitiv din tabelul curent ("fizic") ZAP -- Ignorarea inregistrarilor marcate de catre alte comenzi SET DELETED ON (ignora) SET DELETED OFF (nu ignora) === Functii pe tabele === field(x) - numele campului pe pozitia x fcount() - numarul campurilor din tabelul activ fsiz(x) - marimea campului x bof() - adevarat daca inregistrarea selectata este la inceputul tabelului, altfel fals eof() - adevarat daca inregistrarea selectata este la sfarsitul tabelului, altfel fals recno() - numarul inregistrarii selectate reccount() - numarul de inregistrari in tabel deleted() - adevarat daca inregistrarea curenta este marcata pentru stergere, altfel fals