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}