2012-07-12 77 views
3

我改變我的代碼,使用textread函數textscan問題。從textread更改爲textscan MATLAB

內容data.txt中的(注:我已經改變了所有的實際座標dddd.mmmmmm,ddddd.mmmmmm

$GPGGA,104005.3,dddd.mmmmmm,N,ddddd.mmmmmm,W,1,05,4.4,73.4,M,48.0,M,,*7E 
$GPGGA,104006.3,dddd.mmmmmm,N,ddddd.mmmmmm,W,1,05,2.1,73.5,M,48.0,M,,*7F 
$GPGGA,104007.3,dddd.mmmmmm,N,ddddd.mmmmmm,W,1,05,2.1,74.0,M,48.0,M,,*70 
$GPGGA,104008.3,dddd.mmmmmm,N,ddddd.mmmmmm,W,1,05,2.4,73.9,M,48.0,M,,*7C 
$GPGGA,104009.3,dddd.mmmmmm,N,ddddd.mmmmmm,W,1,04,2.4,73.9,M,48.0,M,,*75 

代碼:

fid = fopen('E:\data.txt','r'); 
Location=zeros(2,); 
Block = 1; 
while(~feof(fid)) 
    A=textscan(fid,'%*s %*s %s %*s %s %*s %*s %*s %*s %*s','delimiter',',','delimiter','\n'); 
    Location(:)=[%s %s]'; 
    x=Location(1,:); 
    y=Location(2,:); 
    Block = Block+1; 
end 
display(Location); 

新的代碼是錯的。我在這裏使用2個分隔符。如果它們不爲空,我想從每行取出經度和緯度值。我該如何糾正它?另外,如果文本文件中有許多不同的行,只需從以$ GPGGA開始的行開始取得Lat Long值,我需要做些什麼?

回答

2

此代碼應努力爲您的要求,並放在正確的符號(請):

fid = fopen('data.txt','r'); 
A=textscan(fid,'%s %*s %f %s %f %s %*s %*s %*s %*s %*s %*s %*s %*s %*s','Delimiter',','); 
fclose(fid); 
Location = [A{[2, 4]}]; 
row_idxs = cellfun(@(s) strcmp(s, '$GPGGA'), A{1}); 
Location = Location(row_idxs, :); 
LatSigns = -2*cellfun(@(dir) strcmp(dir, 'S'), A{3}(row_idxs))+1; 
LongSigns = -2*cellfun(@(dir) strcmp(dir, 'W'), A{5}(row_idxs))+1; 
Location = Location .* [LatSigns LongSigns]; 
display(Location); 
+0

非常感謝你能解決問題......我還需要檢查的第4和第6要素。如果第4和第6個元素分別是S和W,我需要給Lat和Long添加負號。這可能嗎? – user1520813 2012-07-12 21:10:54

+0

不客氣 - 我更新了代碼以解釋跡象。 – Ansari 2012-07-12 21:25:31

+0

太棒了!非常感謝你!!!! – user1520813 2012-07-12 21:32:27