- read one line at a time ( fgetl(fide))
- find the occurrences of the string in the line ( strfind(line,...)
- if an occurrence found stop reading ( if ... break;)
using findstr function for scanning strings in text file.
3 次查看(过去 30 天)
显示 更早的评论
2.11 OBSERVATION DATA M (MIXED) RINEX VERSION / TYPE
teqc 2014Jan16 NOAA/NOS/NGS/CORS 20150102 00:26:47UTCPGM / RUN BY / DATE
Solaris x86 5.10|AMD64|cc SC5.8 -xarch=amd64|=+|=+ COMMENT
teqc 2014Jan16 NOAA/NOS/NGS/CORS 20150102 00:15:53UTCCOMMENT
BIT 2 OF LLI FLAGS DATA COLLECTED UNDER A/S CONDITION COMMENT
BRMU MARKER NAME
42501S004 MARKER NUMBER
Giovanni Sella NGS OBSERVER / AGENCY
351248 LEICA GRX1200GGPRO 8.71/3.823 REC # / TYPE / VERS
00480 JAVRINGANT_DM NONE ANT # / TYPE
2304703.4760 -4874817.1770 3395186.9500 APPROX POSITION XYZ
0.0000 0.0000 0.0000 ANTENNA: DELTA H/E/N
1 1 WAVELENGTH FACT L1/2
10 L1 L2 L5 C1 C2 P2 C5 S1 S2# / TYPES OF OBSERV
S5 # / TYPES OF OBSERV
30.0000 INTERVAL
%Above is the rinex.txt file. I need to classify how many # / TYPES OF OBSERV string exist. The below code works proper in text file if only 1 line includes # / TYPES OF OBSERV.
fide = fopen('rinex.txt')
head_lines = 0
while 1
head_lines = head_lines+1
line = fgetl(fide)
answer = findstr(line,'# / TYPES OF OBSERV')
if ~isempty(answer)
break;
end
end
%The second # / TYPES OF OBSERV doesn't appear in line.
0 个评论
采纳的回答
Guillaume
2015-4-15
Of course, your code only finds the 1st occurence of the string. You've designed it this way:
If you want to find all the occurrences in the whole file, then read the whole file at once:
filecontent = fileread('rinex.txt');
noccurrences = numel(strfind(filecontent, '# / TYPES OF OBSERV'));
4 个评论
Guillaume
2015-4-16
编辑:Guillaume
2015-4-16
Don't accept an answer until you're satisfied with the solution.
The second codes produces observations = {}
I'd forgotten that matlab's regexp engine by default matches newlines with dot which is the complete opposite behaviour of any other regex engine I know (C++, .Net, php, python, java, ruby, perl ...). Therefore the regular expression needs a 'dotexceptnewline' option.
Secondly, the regex assumes that 'TYPES OF OBSERV' terminates the line with no space afterward. Maybe you have spaces afterward.
I've edited my answer to fix the above two. In any case, you may need to tailor the regular expression to the exact pattern you have.
The first one just read the entire file and gives line = -1
Of course it would, you need to replace the comment %do whatever you need... with whatever code you need to process the line. (store it in a cell array? parse it?)
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Install Products 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!