code wiki / _hdl_build / _csv_field_authored.nx
_csv_field_authored.nx source
↩ module page · 19 lines · 1022 B
1// AUTHORED BY THE NISHI BUILDER (csv-field template) -- parse one CSV field, bits-up
2import "nx_syscalls.nx"
3func csv_field(s: *u8, n: i64, out: *u8) -> i64 {
4 var op: i64=0
5 if n>0 { if s[0]==0x22 as u8 {
6 var i: i64=1; var done: i64=0
7 while done==0 { if i>=n { done=1 } else { if s[i]==0x22 as u8 { if i+1<n { if s[i+1]==0x22 as u8 { out[op]=0x22 as u8; op=op+1; i=i+2 } else { done=1; i=i+1 } } else { done=1; i=i+1 } } else { out[op]=s[i]; op=op+1; i=i+1 } } }
8 return op
9 } }
10 var j: i64=0; while j<n { if s[j]==0x2c as u8 { j=n } else { out[op]=s[j]; op=op+1; j=j+1 } }
11 return op
12}
13func main() -> i64 {
14 let s: *u8=sys_mmap(8); s[0]=34 as u8; s[1]=97 as u8; s[2]=44 as u8; s[3]=98 as u8; s[4]=34 as u8; s[5]=44 as u8; s[6]=99 as u8
15 let out: *u8=sys_mmap(32); let n: i64=csv_field(s, 7, out)
16 var ok: i64=1; if n!=3 { ok=0 } if out[0]!=97 as u8 { ok=0 } if out[1]!=44 as u8 { ok=0 } if out[2]!=98 as u8 { ok=0 }
17 if ok==1 { sys_exit(0) } sys_exit(1)
18 return 1
19}