~ubuntu-branches/ubuntu/karmic/scilab/karmic

« back to all changes in this revision

Viewing changes to macros/mtlb/mtlb_sscanf.sci

  • Committer: Bazaar Package Importer
  • Author(s): Torsten Werner
  • Date: 2002-03-21 16:57:43 UTC
  • Revision ID: james.westby@ubuntu.com-20020321165743-e9mv12c1tb1plztg
Tags: upstream-2.6
ImportĀ upstreamĀ versionĀ 2.6

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
function [a,nvars,errmsg,nextindex] = mtlb_sscanf(s,fmt,sz)
 
2
[lhs,rhs]=argn()
 
3
if lhs==4 then error('mtlb_sscanf: nextindex not implemented'),end
 
4
if rhs<3 then sz=%inf,end
 
5
nmx=prod(sz)
 
6
nvars=0
 
7
 
 
8
errmsg=''
 
9
//replicate the format many times to emulate Matlab format reuse
 
10
fmt=strcat(fmt(ones(1,50)))
 
11
 
 
12
lvars=msscanf(s,fmt);
 
13
if lvars==-1 then
 
14
  a=''
 
15
  return
 
16
  errmsg='End of string reached before a datun has been read'
 
17
else
 
18
  nvars=size(lvars)
 
19
  nv=min(nvars,nmx)
 
20
  if nv==0 then
 
21
    a=[]
 
22
  else
 
23
    typ=10
 
24
    a=[]
 
25
    for k=1:nv,typ=min(typ,type(lvars(k))),end
 
26
    if typ==1 then
 
27
      for k=1:nv
 
28
        if type(lvars(k))==1 then
 
29
          a=[a;lvars(k)]
 
30
        else
 
31
          a=[a;ascii(lvars(k))']
 
32
        end
 
33
      end
 
34
      if size(sz,'*')<>1 then 
 
35
        nv=size(a,'*')
 
36
        n=ceil(nv/sz(1))
 
37
        if n*sz(1)>nv then a(n*sz(1))=0;end
 
38
        a=matrix(a,sz(1),n),
 
39
      end
 
40
    else
 
41
      for k=1:nv
 
42
        a=[a;lvars(k)]
 
43
      end
 
44
      if size(sz,'*')<>1 then
 
45
        if sz(1)<=nv then
 
46
          A=ascii(a)'
 
47
          nv=size(A,'*')
 
48
          n=ceil(nv/sz(1))
 
49
          if n*sz(1)>nv then A(nv+1:n*sz(1))=ascii(' ');end
 
50
          A=matrix(A,sz(1),n)
 
51
          a=[]
 
52
          for l=1:sz(1)
 
53
            a=[a;ascii(A(l,:))]
 
54
          end
 
55
        end
 
56
      else
 
57
        a=strcat(a)
 
58
      end
 
59
    end
 
60
  end
 
61
end