Переход от textread к textscan MATLAB

У меня проблема с изменением моего кода, который использует функцию textread для textscan.

Содержимое data.txt:(Примечание:я изменил все фактические координаты на dddd.mmmmmm,dddddd.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 разделителя здесь. Я хочу вынуть значения широты и долготы из каждой строки, если они не равны нулю. Как я могу это исправить? Кроме того, что мне нужно сделать, чтобы значения Lat Long брались только из строк, начинающихся с $GPGGA, если в текстовом файле много разных строк?


person user1520813    schedule 12.07.2012    source источник


Ответы (1)


Этот код должен работать как для ваших требований, так и для правильных знаков (пожалуйста, проверьте):

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);
person Ansari    schedule 12.07.2012
comment
Большое спасибо, это решает проблему... Мне также нужно проверить 4-й и 6-й элементы. Мне нужно добавить отрицательные знаки к широте и долготе, если 4-й и 6-й элементы - это S и W соответственно. Возможно ли это? - person user1520813; 13.07.2012
comment
Пожалуйста - я обновил код, чтобы учесть знаки. - person Ansari; 13.07.2012
comment
Привет, я только что проверил этот код. Это не работает, когда у меня есть эта строка во входном файле $GPGSV,4,4,16,27,,,,26,,,,24,,,,22,,,*79 - person ZzzZZz; 30.09.2012