Lectura de un archivo de texto y trazado en 3D

Quiero leer en un archivo de texto que contiene algunas cadenas pero principalmente números. Quiero poder ignorar las cadenas y solo mirar los números. Quiero trazar esos valores en un plano 3D. Los datos se ven así:

Tech4:<152.266724,173.189377,27.995975> 
<117.880638,156.116531,27.999983> 
<129.849899,59.195660,27.999983> 
<249.321121,60.605404,27.999983>  
<224.120361,139.072739,28.000668> 
<171.188950,143.490921,56.933430> 
<171.188950,143.490921,83.548088>
<171.188950,143.490921,27.999985> 

Creo que leer en un archivo es solo:

File = textread('testFile.txt');

¿Cómo puedo solo mirar esos valores y luego trazarlos?

¡Gracias!

preguntado el 22 de mayo de 12 a las 19:05

2 Respuestas

fid = fopen([pathname,filename]);

tline = fgetl(fid);

CX = [];
CY = [];
CZ = [];

while ischar(tline)
    % skip < and >
    tline = substr(tline, 1, length(tline)-2)

    % extract numbers
    temp = textscan(tline,'%n%n%n', 'delimiter',',');

    CX(end+1,:) = [temp(1)];
    CY(end+1,:) = [temp(2)];
    CZ(end+1,:) = [temp(3)];

    tline = fgetl(fid);
end

fclose(fid);

y luego trazarlo usando plot3 (CX, CY, CZ)

Llamada de función.

Sin embargo, agregue el cheque para "Tech4:" al principio ...

contestado el 22 de mayo de 12 a las 21:05

qué está haciendo la temperatura ('%n%n%n', 'delimiter',',') - andré a

temp es una matriz con un valor triple extraído de una cadena en formato N,N,N. Es como sscanf(tline, "%f,%f,%f", &temp[0], &temp[1], temp[2]) en C. - Viktor Latipov

Está diciendo CX, CY, CZ todos los valores de cambio en cada ciclo. - andré a

el código anterior recopila todos los valores en tres matrices: CX, CY, CZ. - Viktor Latipov

¿Qué tiene de malo la línea tline = fgetl(fid)? Hay un error que dice Identificador de archivo no válido. Use fopen para generar un identificador de archivo válido. - andré a

Creo que también puedes usar directamente escaneo de textos en una sola línea:

fid = fopen('archivo de prueba.txt');
data = textscan(fid,'%*s%f,%f,%f');
fclose (fid);

esto carga los valores de todas las filas con el formato especificado en la variable data. Sin embargo, no hay matlab para probarlo.

fscanf es una opción para, el mismo tipo de parámetros que textscan.

EDITAR: error tipográfico, desea detectar flotantes (%f) por supuesto, y no enteros (%d)

EDIT2: obtuve matlab y lo probé, esto funciona aquí para su entrada de muestra ^^

fid = fopen('testFile.txt');
data = textscan(fid,'%*s%f%f%f','Delimiter',',<>')
fclose(fid);

contestado el 23 de mayo de 12 a las 09:05

Cuando uso fid = fopen([nombre de ruta, nombre de archivo]), ¿qué pongo para nombre de ruta para decir algo que está en c:/Archivos de programa (x86)/Bloc de notas++/fileTest.txt? - andré a

Solo usa fid = fopen('c:/Program Files(x86)/Notepad++/fileTest.txt'); - Günther Struyf

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.