<Task>
We have a text file tab2.5.csv (contents) in which experimental data (xi, yi, zi) are written from line 2 and beyond in the comma-separated format. The task is to read yi to form a vector (y0,y1,・・・,yndata-1) and to multiply each component by a. The number of components, ndata, can be judged from the file, but is surely less than 1000. The number of items is at most three. The size information is important to Modula-2. |
<What if Excel is used>
If you click this file, Excel will start automatically. You will find data in columns A, B, C from rows 2, 3, .... If you want to have the data in column D scaled, input "=B2*$D$1" to cell D2, where a is assumed to be stored in cell D1. Just drag D2 downward and you will have scaled values. |
<Python (Object Oriented Programming)>
[Module] fileRead.py [Main] mytest.pyclass readtest: def __init__(self,fname): w = [] file = open(fname, 'r') nline = 0 while (True): line = file.readline() print(line, end="") if len(line)==0: break nline += 1 if nline == 1: self.header = line else: result = line.split(',') w.append(float(result[1])) file.close() nline -= 1 self.ndata = nline self.w = w def scaling(x, a): n = len(x) out = x.copy() for i in range(n): out[i] = a*out[i] return out f = fileRead.readtest('tab2.5.csv') ndata = f.ndata y = f.w yy = scaling(y, 2.) print(y,', ',yy) |
<Modula-2 (Structured Programming)> DEFINITION MODULE fileRead.DEF VAR header: ARRAY[0..79] OF CHAR; PROCEDURE readtest(fname: ARRAY OF CHAR; VAR ndata: INTEGER; VAR y: ARRAY OF LONGREAL);
IMPLEMENTATION MODULE fileRead.MOD PROCEDURE readtest(fname: ARRAY OF CHAR; VAR ndata: INTEGER; VAR y: ARRAY OF LONGREAL); VAR f : FIO.File; line, s: ARRAY[0..79] OF CHAR; nline,i: INTEGER; OK : BOOLEAN; BEGIN IF NOT FIO.Exists(fname) THEN RETURN END; f := FIO.Open(fname); nline := 0; ndata := 0; LOOP FIO.RdStr(f,line); WrStr(line); WrLn; IF Str.Length(line)=0 THEN EXIT END; INC(nline); IF nline=1 THEN Str.Copy(header,line); ELSE Str.Item(s, line, Str.CHARSET{','}, 1); y[ndata]:= Str.StrToReal(s,OK); INC(ndata); END; END; FIO.Close(f); END readtest; [Main] mytest.MOD IMPORT fileRead; IMPORT WrStr, WrLn, WrLngReal, WrInt; PROCEDURE scaling(VAR yout: ARRAY OF LONGREAL; yin: ARRAY OF LONGREAL; n: INTEGER; a: LONGREAL); VAR i: INTEGER; BEGIN FOR i:=0 TO n-1 DO yout[i]:= a*yin[i]; END; END scaling; VAR ndata: INTEGER; y,yy : ARRAY[0..999] OF LONGREAL; BEGIN fileRead.readtest('tab2.5.csv', ndata, y); scaling(yy, y, ndata, 3.0); WrStr('ndata='); WrInt(ndata,1); WrLn; FOR i:=0 TO ndata-1 DO WrLngReal(y[i],5,10); WrStr(', '); WrLngReal(yy[i],5,10); WrLn; END; |
<Remark> | |
|
|