Tengo algunos datos rostopic de Pose Update que escribí en un archivo csv usando rostopic echo / foo> foo.csv

Foo.csv se ve así:

%time,field
1539675906586600065,0.157465848996
1539675906587352037,0.160723703902
1539675906587656974,0.161057770877
1539675906587693929,0.161579636574

Estoy tratando de importar esto a Octave para su posterior procesamiento, pero no es exactamente un delimitador constante y no he tenido suerte con dlmread o dlmwrite.

Lo intenté

nsec = dlmread (nsecval,"\n",r1,c1)

 error: 'nsecval' undefined near line 1 column 17 error: evaluating argument list element number 1`

Necesito:

  1. Ignore la primera fila con% tiempo, campo
  2. Tome solo la segunda parte de cada fila, p. Ej. 0.157465848996
  3. Convierta los espacios a un formato con el que puedan trabajar dlmread o csvread
  4. Convierta todos esos valores en una columna de una matriz.

E.g.

0.157465848996
0.160723703902
0.161057770877
0.161579636574

Soy realmente nuevo en Octave y la informática científica en general y realmente agradecería un poco de ayuda.

0
user10511678 16 oct. 2018 a las 11:28

2 respuestas

La mejor respuesta

Si está utilizando linux, le recomiendo un pequeño preprocesamiento con sed para reemplazar todas las comas con espacios:

 sed  -i "s#,# #g"  your_file

Si está usando Windows o cualquier otra cosa, reemplazar las comas debería ser igualmente fácil. Una vez que tenga esto, en octava, simplemente use

i=load("your_file"); 
vec=i(:,2);

Para convertir la segunda columna en un vector de columna.

0
Ash 16 oct. 2018 a las 14:14

En primer lugar, el problema probado con nsec = dlmread (nsecval, "\ n", r1, c1):

El error de octava te dice que no sabe qué es 'nsecval'.

Luego, usando dlmread, la función espera el nombre del archivo, el valor del delimitador, la fila de inicio, la columna de inicio (desde 0), así que algo como:

nsec = dlmread ("foo.csv", ",", 1, 1)

Obtendrá los datos que necesita.

0
lostbard 17 oct. 2018 a las 20:52