Matlab - leer archivos con salto de linea

 
Vista:

leer archivos con salto de linea

Publicado por Arnold Torres (26 intervenciones) el 29/09/2010 01:28:11
Hola a todos...
Necesito una ayudita con el siguiente problema. Resulta q necesito extraer de un archivo .txt una informacion, cuando este archivo no tiene espacio entre lineas no tengo problemas, pero cuando hay un espacio es cuando empieza el suplicio. Me explico, por ejemplo, tengo un archivo como el q se muestra a continuación

13194.604546686 14.2586958745999

2.3539056884567 2.3539056884567
3.2525252525255 1.2584235684167
5.2525252525255 3.2525252525255
3.2525252525255 8.2525252525255
Este archivo realmente tiene 6 filas (incluida la fila en blanco), pero yo solo quiero extraer las filas q contienen datos y con ella construir una matriz... ¿Que puedo hacer para solucionar este problema? Como dije antes ,cuando la fila en blanco no existe, no tengo ningún problema... pero es q realmente no se q hacer cuando se presenta esto... De ante mano muchas gracias por la colaboración
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:leer archivos con salto de linea

Publicado por Jorge (226 intervenciones) el 29/09/2010 20:28:53
Bueno, lo que puedes hacer es pre-procesar la lectura del archivo.

Lees cada renglón, si tiene contenido lo añades a una matriz; si está vacío lo ignoras y sigues con otro renglón.

Cómo lees los archivos? Están en una iteración?
Usas 'textscan'?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:leer archivos con salto de linea

Publicado por Arnold Torres (26 intervenciones) el 30/09/2010 01:20:57
Gracias por tu comentario Jorge.
Mira lo que estoy haciendo. El contenido del archivo que estoy leyendo es este

xyzwvca14_1 13194.60454668 6.95964103E-02 3.84406755E-02
2IN___COUT__C 1.61848739E-02 -6.12753874E-03 0.00000000E+00
5.96211394E-02 6.95968165E-02 3.84406755E-02
3IN___COUT__C 1.61850638E-02 -6.12680820E-03 0.00000000E+00
1.61848739E-02 -6.12753874E-03 0.00000000E+00
5.96211425E-02 6.95964103E-02 3.84406755E-02
Como te puedes dar cuenta no hay lineas en blanco... El siguiente es el codigo de matlab que estoy utilizando

clc

fid = fopen('arnold_prueba.txt','r');

k = [ ]; A = zeros(6,3);
while isempty(k) == 1
tline = fgets(fid);
k = findstr(tline,'xyzwvca14_1 ');
if isempty(k) == 0
for kk = 1:6
if kk == 1 || kk == 2 || k==4
C = textscan(tline,'%*13c%n %n %n');
else
C = textscan(tline,'%n %n %n');
end
A(kk,1:3) = [C{1,1} C{1,2} C{1,3}];
tline = fgetl(fid);
end
end
end
fclose(fid);
A

El resultado que me muestra es este

A =
13194.60454668 0.0695964103 0.0384406755
0.0161848739 -0.00612753874 0
0.0596211394 0.0695968165 0.0384406755
3 3 3
0.0161848739 -0.00612753874 0
0.0596211425 0.0695964103 0.0384406755

Este codigo esta funcionando perfectamente, no hay problema. El problema es que realmente necesito leer un archivo que contiene datos y que entre datos hay lineas en blanco...
Suponte q el contenido del archivo q necesito leer es este

xyzwvca14_1 13194.60454668 6.95964103E-02 3.84406755E-02

2IN___COUT__C 1.61848739E-02 -6.12753874E-03 0.00000000E+00
5.96211394E-02 6.95968165E-02 3.84406755E-02
3IN___COUT__C 1.61850638E-02 -6.12680820E-03 0.00000000E+00
1.61848739E-02 -6.12753874E-03 0.00000000E+00
5.96211425E-02 6.95964103E-02 3.84406755E-02

Fíjate q entre la primera y la segunda linea hay un espacio en blanco. El código q te mostré antes no sirve para este caso. La verdad no se q comando o q truco o que modificación al primer código debo hacer para resolver este problema, ya le di muchas vueltas y nada... obviamente necesito que me de como resultado la misma matriz q te he mostrado. Si tienes alguna pista te la agradecería inmensamente.
Saludos....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:leer archivos con salto de linea

Publicado por Jorge (226 intervenciones) el 30/09/2010 09:24:10
Hola,

Estoy fuera de contexto y no sé cuántas variantes del problema tengas.

Esta solución intenta mantener tu código en lo posible.

----------------
Por cierto, hay una línea que dice:

if kk == 1 || kk == 2 || k==4

supongo (supongo) que lo correcto es:

if kk == 1 || kk == 2 || kk==4
----------------

Solamente añadí una verificación cuando lees una línea nueva: tline = fgetl(fid);
Si lo que se lee está vacío, entonces lee la línea siguiente.

clc, clear, format compact, format long

fid = fopen('arnold_prueba.txt','r');

k = [ ]; A = zeros(6,3);
while isempty(k) == 1
tline = fgets(fid);
k = findstr(tline,'xyzwvca14_1 ');
if isempty(k) == 0
for kk = 1:6
if kk == 1 || kk == 2 || kk == 4
C = textscan(tline,'%*13c %n %n %n');
else
C = textscan(tline,'%n %n %n');
end
A(kk,1:3) = [C{1,1} C{1,2} C{1,3}];
tline = fgetl(fid);
if size(tline) == [0,0]
tline = fgetl(fid);
end
end
end
end
fclose(fid);
A

Pruébalo y me dices.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:leer archivos con salto de linea

Publicado por Arnold Torres (26 intervenciones) el 30/09/2010 16:25:25
Hola Jorge...
Hermano.... funcionó perfecto... le estoy inmensamente agradecido, ya estaba aburrido de darle vueltas al asunto y no encontrar la solución.... De verdad que me alegró la mañana...
Un abrazo maestro y de nuevo muchas gracias...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:leer archivos con salto de linea

Publicado por Alonso (2 intervenciones) el 10/04/2014 03:21:27
Hola que tal no entendí muy bien la forma en que se soluciono el problema.
si yo tengo una serie de datos:

1 23 -45 sde -435 5

5 32 21 ed 345 3

6 67 89 rf 456 8

todos con una secuencia de un salto de línea, cuando yo quiero leer este archivo solo me da como resultado el primer renglón.

espero me puedan ayudar. Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:leer archivos con salto de linea

Publicado por Alonso (2 intervenciones) el 10/04/2014 04:20:41
REGISTRO DE DATOS

No.----- time-------code-------shear

1---------0.02-------- i------------234
------------------------ j------------124
2---------0.04---------i------------345
------------------------- j------------789
3---------0.06---------i------------789
-------------------------j-------------534


O mas especifico en mi problema este es el archivo que tengo que leer si se dan cuenta en el segundo renglón de los datos hay un espacio en blanco el cual registra datos hasta la tercer columna, no se como me pueda leer correctamente el archivo pues con mi código solo lee el primer renglón.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar