[Scilab-users] Advice needed on file parsing

Samuel Gougeon sgougeon at free.fr
Mon Jun 19 10:47:03 CEST 2017


Helle Richard,

Le 18/06/2017 à 23:10, Richard llom a écrit :
> Hello fellow scilab-users,
> I'm writing a script to read and process files, which are constructed as
> follows:
> <file start>
> PCB: 007
> ASM: 000
> LOT: 00000
> FW:  1477971088
> CH1:  AMPS   10A
> CH2:  VOLT   60V
> SMPL: 0064 0125Hz
> DESC: 12V CU LOG
> UTC TIME SEC  ,CH1 AMPS DC  ,CH2 VOLT DC
> 1497812372.910, 8.609146E-03, 1.210613E001
> 1497812373.895, 1.577809E-01, 1.207540E001
> 1497812374.578, 1.010268E000, 1.193087E001
> ... [snip]
> <file end>
>
> To process this file further, I need:
> 1)
> the first eight lines stored in pairs, e.g.
> info(1,1) should yield "PCB" and info(1,2) should yield "007" (string is ok)
>
> 2)
> line #9 (header), should be available as header(1)="UTC TIME SEC", etc...
>
> 3)
> line 10+
> these should be scanned in as a matrix.
>
>
> I already tried csvread and msscanf (?), however with no luck so far...

You may use the following:

[M, comments] = csvRead("data.txt", ",", ".", "double",[], "/^[^0-9\-]/"); M
header = tokens(comments($), ",")'
params = csvTextScan(comments(1:$-1), ":", [], "string")

-->[M, comments] = csvRead("data.txt", ",", ".", "double",[], 
"/^[^0-9\-]/"); M
  M  =
     1.498D+09    0.0086091    12.10613
     1.498D+09    0.1577809    12.0754
     1.498D+09    1.010268     11.93087

-->header = tokens(comments($), ",")'
  header  =
!UTC TIME SEC    CH1 AMPS DC    CH2 VOLT DC    !

-->params = csvTextScan(comments(1:$-1), ":", [], "string")
  params  =
!PCB    007          !
!ASM    000          !
!LOT    00000        !
!FW      1477971088  !
!CH1     AMPS   10A  !
!CH2     VOLT   60V  !
!SMPL   0064 0125Hz  !
!DESC   12V CU LOG   !

  HTH
Samuel

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.scilab.org/pipermail/users/attachments/20170619/d7d6cbc6/attachment.htm>


More information about the users mailing list