2016-09-06 91 views
0

讀我有一個txt文件,每個由製表符分隔線總是兩個值:Matlab的:從txt文件

0 0 
23 69 
45 108 
81 158 
110 253 
125 357 
141 492 
165 606 
179 753 
189 983 
. . 
0 0 
4 31 
33 38 
45 89 
60 115 
75 166 
93 201 
107 216 
116 291 
133 366 
148 480 
170 631 
196 720 
207 994 
. . 
0 0 
19 81 
33 102 
46 128 
72 161 
138 236 
178 398 
197 537 
210 658 
220 832 
. . 
0 0 
24 38 
40 90 
71 166 
99 193 

始終以0開頭和結尾。 。 (80次)

我想用Matlab讀取所有的數據。這是我的代碼:

% Variab 
line{1} = 0; 
% Open files 
fid = fopen(('D:\Dokumente\Studium\8. Semester\BA\Vali mit einzelenne punkten\alle.txt'), 'rt'); 
% Read Data 
for i = 1:80 
    j = 1; 
    line = fgets(fid); 
    line = textscan(line,'%f %f'); 
    while line{1} ~= '.' 
     digNum{i}(j) = line{1}; 
     gewicht{i}(j) = line{2}; 
     line = fgets(fid); 
     line = textscan(line,'%f %f'); 
     j = j + 1; 
    end 
end 

因此,大家可以看到我想要的左邊的數字保存爲digNum {「‘upOneValueWhen} {numberIn'Vector’}和右邊的數字gewicht {upOneValueWhen」。'} {numberIn'Vector'}。

一切工作正常,但當我得到digNum = 46(第二個到最後一個「矢量」){upOneValueWhen'。'}上升一個數字。 我不知道爲什麼。 '我'應該只在'後'上升。但由於某種原因,它在這一特定點上升。

任何想法??? 非常感謝你提前

+0

您的示例數據不會重現您的問題。 – excaza

+0

你需要我複製粘貼所有數據嗎? –

+0

需要的是一個重現問題的例子。 – excaza

回答

-1

如上所述,迄今爲止的數據不會再現問題。幸運的是,您應該可以通過以下步驟自行解決它:

  1. 在您的代碼中放置(條件)斷點。
  2. 找到事情進展順利的最後時刻,以及出現問題的第一時刻。
  3. 進入到最後時刻,事情進展順利,並運行一行代碼行,仔細看一下所有變量是如何改變

這樣你很快就會發現問題。

0

我會嘗試讀取整個文件中的一個,而達到循環,一行行,直到文件的末尾:

% Open files 
fid = fopen('test.txt'); 
% Read Data 
i = 1; 
j = 1; 

while(~feof(fid)) 
    line = fgetl(fid); 

    if strfind(line,'.') 
     i = i + 1; 
     continue; 
    end; 

    s = textscan(line,'%s','delimiter',' '); 
    digNum{i,j} = str2double(s{1}{1}); 
    gewicht{i,j} = str2double(s{1}{length(s{1,1})}); 

    j = j + 1; 

end; 

fclose(fid); 

現在你可以很容易地增加i.確認。

此外,利用str2double您將能夠將所有數據放入兩個矩陣。

我認爲上述工作如上所述。