Mathcad: cum să se ocupe de un fișier cu date mixte numerice și șir?
Citirea și procesarea unei matrici sau vectori dintr-un fișier text în Mathcad arata destul de simplu:- Funcția READPRN ("nume de fișier") returnează o matrice în care fiecare linie este determinată de înregistrarea (șirul) fișierului. Numărul de elemente (valori numerice) din fiecare rând al fișierului trebuie să fie același. Folosit în formularul A: = READPRN ("nume fișier"). unde A este o matrice;
- Funcția WRITEPRN ("nume de fișier") scrie matricea într-un fișier de date. Fiecare linie a matricei devine o intrare de fișier. Folosit în formularul WRITEPRN ("nume de fișier"): = A. unde A este o matrice;
- Funcția APPENDPRN ("nume de fișier") adaugă matricea la un fișier existent. Folosit în formularul APPENDPRN ("nume de fișier"): = A. Fișierul existent trebuie să aibă același număr de coloane ca și matricea A.
Aceste funcții sunt proiectate să funcționeze cu un fișier de date structurat, adică un fișier care conține numere aranjate în rânduri și coloane. Ca un caz special, fișierul poate conține un rând sau o coloană cu numere, adică un șir vectorial sau un vector de coloană.
Ca exemplu practic, vom rezolva această problemă:
Fișierul conține o matrice de scoruri de elevi N la subiecții M, N> 1, M> 0. Citiți datele și calculați următoarele valori:- scorul mediu pentru fiecare subiect și fiecare elev;
- scorul mediu global al grupului;
- numărul de evaluări "2", "3", "4" și "5".
Dacă datele originale sunt stocate într-un fișier data.txt al formularului
apoi codul complet al soluției arată astfel:
citiți și scrieți matrice în Mathcad
Dacă fișierul este "incorect", adică nu conține același număr de valori numerice pe fiecare rând, atunci funcția READPRN nu o citește. În plus, verificăm dacă fișierul conține estimări valide (adică valori 2, 3, 4 sau 5) utilizând variabila Check.
Rezultatele sunt scrise în fișierul result.txt al dosarului curent, asta sa întâmplat:
A fost adăugat dreptul de jos inferior, astfel încât APPENDPRN să nu refuze adăugarea unui șir de vectori cu scoruri medii la trei subiecte din dosar.
Pentru ca acest cod să funcționeze, trebuie să îndepliniți trei condiții:- documentul MathCAD a fost salvat cel puțin o dată;
- Fișierul text.txt a fost salvat în același director ca și documentul MathCAD;
- Fișierul text conține numai valori numerice, iar numărul fiecărui rând al fișierului este același (numărul de spații sau file dintre valorile dintr-o singură linie nu contează).
Ce a fost incomod în decizia noastră? În primul rând, elevii din listă diferă doar prin numere. Pot face Mathcad citesc fișier text normal, cu textul și numerele, și chiar vă permite să aveți un număr diferit de delimitatori în rândurile și un număr diferit de numere pe aceeași linie?
Pentru a rezolva o astfel de problemă, este convenabil să folosiți panoul de programare și funcția READCSV. destinate citirii datelor text arbitrare. Funcția este disponibilă în versiunea Mathcad 15
Pregătiți următoarele funcții:- char (s, i) - extragerea din sirul s a unui simbol cu un număr valabil i;
- isdiv (s) - verifică dacă un șir de caractere unic este un delimitator, adică un spațiu, o filă sau o rupere de linie. Returnează 0 sau 1;
- trimstr (s) - elimină delimitatori suplimentare la începutul, la sfârșitul liniei și între jetoanele. Returnează un șir de jetoane separate printr-un singur spațiu.
Funcțiile char și isdiv (Mathcad)
Funcția trimstr (Mathcad)
Valoarea setările de sistem ORIGIN presupus a fi zero (implicit), Instrumente opțiune - Opțiuni Foaie de lucru - Calcule - Utilizare ORIGIN la indexare șir nu este setat, adică, liniile sunt întotdeauna indexate de la zero, indiferent de valoarea de origine. acest lucru este, de asemenea, acceptat implicit.
Acum suntem gata să scriem o funcție care analizează matricea dintr-o coloană care conține următoarele intrări (file.txt.txt):
funcția parse (Mathcad)
Funcția presupune că prima dintre jetoanele rămase după prelucrarea trimstr în linia următoare a simbolului este un șir care se încadrează în matricea Nume. iar tokenurile rămase sunt valori numerice scrise în matricea Balls.
Este esențial ca această funcție nu trebuie să fie confundat cu o serie de date non-bile (în poziția corectă a matricei este scris la zero cm. Operator eroare) sau un număr diferit de numere într-un rând (Mathcad automat „extinde“ matrice prin umplerea coloanelor libere zerouri).
Test.txt fișier text salvat în Unicode (UTF-8), în acest caz, noul meu Mathcad 15 M045 citit de caractere chirilice, fără nici o problemă.
Rămâne să verificați ce sa întâmplat și apoi utilizați numele și bilele de tablouri la discreția dvs., de exemplu, ca în sarcina anterioară.
test funcția parse (Mathcad)
P.S. Toate codurile noastre lungi ar trebui să fie considerate, desigur, ca fiind educaționale. Într-adevăr, am putea, după configurarea funcției de citire READCSV, să rezolvăm problema în 3 rânduri din cod:
READCSV - cod scurt pentru a citi dintr-un fișier CSV
Fișierul list.txt conține delimitatori suplimentari, fiind:
Dacă fișierul este salvat din Notepad, selectați atunci când salvați codificarea Unicode sau UTF-8, Mathcad-ul BOM nu trebuie să fie împiedicat. De asemenea, funcția nu va confunda numerele "lipsă" din date, în cazul nostru le va înlocui cu zerouri.