How to loop multi-line with data text?

Hi everyone.
I have a question: How to loop muilti-line with data text? (The image describes the data below)
Please help me.
Thank you.

5 件のコメント

Mathieu NOE
Mathieu NOE 2022 年 4 月 20 日
hi
try readlines
Mathieu NOE
Mathieu NOE 2022 年 4 月 20 日
seems I have already seen this log file in another post ....
was the provided solution finally not good enough ?
Peter Fang
Peter Fang 2022 年 4 月 20 日
my matlab can't use: readlines. Do you have a way with the for command?
Voss
Voss 2022 年 4 月 20 日
@Peter Fang Why use a for loop at all? Just read the whole file at once:
fid = fopen('EX.txt');
data = fread(fid,'*char').';
fclose(fid);
disp(data);
2021-3-31 5:2:56 258 [INFO] Listen Port 104 Success 2021-3-31 7:23:44 20 [INFO] Print Job 6704654239889586 Status Pending: Preparing films for printing 2021-3-31 7:23:44 145 [INFO] Print Job 6704654239889586 Status Printing: PrinterIP=192.168.121.103 AETitle=DXWORKS Printing Started 2021-3-31 7:23:44 426 [INFO] 【Printer Array】 Printer CANON ADHR16810 10X12INCH OUTDUOI Jobs 0 2021-3-31 7:23:44 442 [INFO] 【Printer Array】 Printer CANON ADHR18526 10X12INCH OUTTREN Jobs 0 2021-3-31 7:23:44 457 [INFO] 【Printer Array】 Printer CANON ADHR19500 10X12INCH Jobs 0 2021-3-31 7:23:44 473 [INFO] 【Printer Array】 Printer CANON ADHR19965 10X12INCH OUTGIUA Jobs 0 2021-3-31 7:23:44 489 [INFO] 【Printer Array】 Printer CANON ADHR24739 10X12 DUOI TRONG Jobs 0 2021-3-31 7:23:44 551 [INFO] 【Printer Array】 Printer CANON ADHR16810 10X12INCH OUTDUOI Start printing! 2021-3-31 7:23:45 410 [INFO] Print Job 6704654239889586 Status Printing: Printing film 1 of 1 2021-3-31 7:23:46 504 [INFO] Print Job 6704654239889586 Status Done: Printing Done 2021-3-31 7:23:46 504 [INFO] Print complete! Filmsize:10INX12IN PrintType:GrayScale Printer: CANON ADHR16810 10X12INCH OUTDUOI Paper: 10"x12" 25x30cm 2021-3-31 7:24:2 237 [INFO] Print Job 6704654422370495 Status Pending: Preparing films for printing 2021-3-31 7:24:2 252 [INFO] Print Job 6704654422370495 Status Printing: PrinterIP=192.168.121.103 AETitle=DXWORKS Printing Started 2021-3-31 7:24:2 299 [INFO] 【Printer Array】 Printer CANON ADHR16810 10X12INCH OUTDUOI Jobs 1 2021-3-31 7:24:2 315 [INFO] 【Printer Array】 Printer CANON ADHR18526 10X12INCH OUTTREN Jobs 0 2021-3-31 7:24:2 346 [INFO] 【Printer Array】 Printer CANON ADHR19500 10X12INCH Jobs 0 2021-3-31 7:24:2 362 [INFO] 【Printer Array】 Printer CANON ADHR19965 10X12INCH OUTGIUA Jobs 0 2021-3-31 7:24:2 393 [INFO] 【Printer Array】 Printer CANON ADHR24739 10X12 DUOI TRONG Jobs 0 2021-3-31 7:24:2 440 [INFO] 【Printer Array】 Printer CANON ADHR18526 10X12INCH OUTTREN Start printing! 2021-3-31 7:24:2 971 [INFO] Print Job 6704654422370495 Status Printing: Printing film 1 of 1 2021-3-31 7:24:3 486 [INFO] Print Job 6704654422370495 Status Done: Printing Done 2021-3-31 7:24:3 486 [INFO] Print complete! Filmsize:10INX12IN PrintType:GrayScale Printer: CANON ADHR18526 10X12INCH OUTTREN Paper: 10"x12" 25x30cm 2021-3-31 7:25:5 128 [INFO] Print Job 6704655051285743 Status Pending: Preparing films for printing 2021-3-31 7:25:5 159 [INFO] Print Job 6704655051285743 Status Printing: PrinterIP=192.168.121.103 AETitle=DXWORKS Printing Started 2021-3-31 7:25:5 206 [INFO] 【Printer Array】 Printer CANON ADHR16810 10X12INCH OUTDUOI Jobs 1 2021-3-31 7:25:5 222 [INFO] 【Printer Array】 Printer CANON ADHR18526 10X12INCH OUTTREN Jobs 1 2021-3-31 7:25:5 253 [INFO] 【Printer Array】 Printer CANON ADHR19500 10X12INCH Jobs 0 2021-3-31 7:25:5 284 [INFO] 【Printer Array】 Printer CANON ADHR19965 10X12INCH OUTGIUA Jobs 0 2021-3-31 7:25:5 300 [INFO] 【Printer Array】 Printer CANON ADHR24739 10X12 DUOI TRONG Jobs 0 2021-3-31 7:25:5 347 [INFO] 【Printer Array】 Printer CANON ADHR19500 10X12INCH Start printing! 2021-3-31 7:25:5 894 [INFO] Print Job 6704655051285743 Status Printing: Printing film 1 of 1 2021-3-31 7:25:6 409 [INFO] Print Job 6704655051285743 Status Done: Printing Done 2021-3-31 7:25:6 409 [INFO] Print complete! Filmsize:10INX12IN PrintType:GrayScale Printer: CANON ADHR19500 10X12INCH Paper: 10"x12" 25x30cm 2021-3-31 7:27:5 944 [INFO] Print Job 6704656259440377 Status Pending: Preparing films for printing 2021-3-31 7:27:5 990 [INFO] Print Job 6704656259440377 Status Printing: PrinterIP=192.168.121.103 AETitle=DXWORKS Printing Started 2021-3-31 7:27:6 22 [INFO] 【Printer Array】 Printer CANON ADHR16810 10X12INCH OUTDUOI Jobs 0 2021-3-31 7:27:6 53 [INFO] 【Printer Array】 Printer CANON ADHR18526 10X12INCH OUTTREN Jobs 1 2021-3-31 7:27:6 69 [INFO] 【Printer Array】 Printer CANON ADHR19500 10X12INCH Jobs 1 2021-3-31 7:27:6 100 [INFO] 【Printer Array】 Printer CANON ADHR19965 10X12INCH OUTGIUA Jobs 0 2021-3-31 7:27:6 131 [INFO] 【Printer Array】 Printer CANON ADHR24739 10X12 DUOI TRONG Jobs 0 2021-3-31 7:27:6 178 [INFO] 【Printer Array】 Printer CANON ADHR19965 10X12INCH OUTGIUA Start printing! 2021-3-31 7:27:6 725 [INFO] Print Job 6704656259440377 Status Printing: Printing film 1 of 1 2021-3-31 7:27:7 256 [INFO] Print Job 6704656259440377 Status Done: Printing Done 2021-3-31 7:27:7 256 [INFO] Print complete! Filmsize:10INX12IN PrintType:GrayScale Printer: CANON ADHR19965 10X12INCH OUTGIUA Paper: 10"x12" 25x30cm 2021-3-31 7:27:17 207 [INFO] Print Job 6704656372070258 Status Pending: Preparing films for printing 2021-3-31 7:27:17 238 [INFO] Print Job 6704656372070258 Status Printing: PrinterIP=192.168.121.25 AETitle=FCR-CSL Printing Started 2021-3-31 7:27:17 269 [INFO] 【Printer Array】 Printer CANON ADHR19489 8X10INCH Jobs 0 2021-3-31 7:27:17 300 [INFO] 【Printer Array】 Printer CANON ADHR23071 8X10INCH Jobs 0 2021-3-31 7:27:17 331 [INFO] 【Printer Array】 Printer CANON ADHR19489 8X10INCH Start printing! 2021-3-31 7:27:17 863 [INFO] Print Job 6704656372070258 Status Printing: Printing film 1 of 1 2021-3-31 7:27:17 972 [ERROR] data using pi mode 2021-3-31 7:27:18 300 [INFO] Print Job 6704656372070258 Status Done: Printing Done
Peter Fang
Peter Fang 2022 年 4 月 20 日
The reason i want to check them one by one is because, i need to find the word Printing Done and from which date it appears.
But also thank you very much for your answer :D

サインインしてコメントする。

 採用された回答

Mathieu NOE
Mathieu NOE 2022 年 4 月 20 日

1 投票

hello again
try this code - does not require readlines
line_index will give you which line contains the searched string
filename = 'EX.txt';
str = "Printing Done";
[lines,count,line_index] = myfunction_read(filename,str)
%%%%%%% functions %%%%%%%%%
function lines = my_readlines(filename)
% work around for earlier matlab releases (not having readlines)
lines = regexp(fileread(filename), '\r?\n', 'split');
if isempty(lines{end}); lines(end) = []; end %end of file correction
end
%%%%%%%%%%%%%%%%%%%%%%%%%
function [lines,count,line_index] = myfunction_read(filename,str)
lines = my_readlines(filename);
% init data
count = 0;
for ci = 1:numel(lines)
ll = lines(ci);
if contains(ll,str) %
count = count+1;
line_index(count) = ci;
end
end
end

1 件のコメント

Mathieu NOE
Mathieu NOE 2022 年 4 月 20 日
if you need to display the corresponding lines, it's fairly easy :
selected_lines = lines(line_index)'
selected_lines =
5×1 cell array
{'2021-3-31 7:23:46 504 [INFO] Print Job 6704654239889586 Status Done: Printing Done'}
{'2021-3-31 7:24:3 486 [INFO] Print Job 6704654422370495 Status Done: Printing Done' }
{'2021-3-31 7:25:6 409 [INFO] Print Job 6704655051285743 Status Done: Printing Done' }
{'2021-3-31 7:27:7 256 [INFO] Print Job 6704656259440377 Status Done: Printing Done' }
{'2021-3-31 7:27:18 300 [INFO] Print Job 6704656372070258 Status Done: Printing Done'}

サインインしてコメントする。

その他の回答 (1 件)

Voss
Voss 2022 年 4 月 20 日

2 投票

You can read the file in one fell swoop, then break the contents into individual lines, and retrieve the dates/times from lines where 'Printing Done' appears:
% read the entire file
fid = fopen('EX.txt');
data = fread(fid,'*char').';
fclose(fid);
% cell array C, with each element containing one line of text
C = strsplit(data,newline()).'
C = 53×1 cell array
{'2021-3-31 5:2:56 258 [INFO] Listen Port 104 Success←' } {'2021-3-31 7:23:44 20 [INFO] Print Job 6704654239889586 Status Pending: Preparing films for printing←' } {'2021-3-31 7:23:44 145 [INFO] Print Job 6704654239889586 Status Printing: PrinterIP=192.168.121.103 AETitle=DXWORKS Printing Started←' } {'2021-3-31 7:23:44 426 [INFO] 【Printer Array】 Printer CANON ADHR16810 10X12INCH OUTDUOI Jobs 0←' } {'2021-3-31 7:23:44 442 [INFO] 【Printer Array】 Printer CANON ADHR18526 10X12INCH OUTTREN Jobs 0←' } {'2021-3-31 7:23:44 457 [INFO] 【Printer Array】 Printer CANON ADHR19500 10X12INCH Jobs 0←' } {'2021-3-31 7:23:44 473 [INFO] 【Printer Array】 Printer CANON ADHR19965 10X12INCH OUTGIUA Jobs 0←' } {'2021-3-31 7:23:44 489 [INFO] 【Printer Array】 Printer CANON ADHR24739 10X12 DUOI TRONG Jobs 0←' } {'2021-3-31 7:23:44 551 [INFO] 【Printer Array】 Printer CANON ADHR16810 10X12INCH OUTDUOI Start printing!←' } {'2021-3-31 7:23:45 410 [INFO] Print Job 6704654239889586 Status Printing: Printing film 1 of 1←' } {'2021-3-31 7:23:46 504 [INFO] Print Job 6704654239889586 Status Done: Printing Done←' } {'2021-3-31 7:23:46 504 [INFO] Print complete! Filmsize:10INX12IN PrintType:GrayScale Printer: CANON ADHR16810 10X12INCH OUTDUOI Paper: 10"x12" 25x30cm ←'} {'2021-3-31 7:24:2 237 [INFO] Print Job 6704654422370495 Status Pending: Preparing films for printing←' } {'2021-3-31 7:24:2 252 [INFO] Print Job 6704654422370495 Status Printing: PrinterIP=192.168.121.103 AETitle=DXWORKS Printing Started←' } {'2021-3-31 7:24:2 299 [INFO] 【Printer Array】 Printer CANON ADHR16810 10X12INCH OUTDUOI Jobs 1←' } {'2021-3-31 7:24:2 315 [INFO] 【Printer Array】 Printer CANON ADHR18526 10X12INCH OUTTREN Jobs 0←' } {'2021-3-31 7:24:2 346 [INFO] 【Printer Array】 Printer CANON ADHR19500 10X12INCH Jobs 0←' } {'2021-3-31 7:24:2 362 [INFO] 【Printer Array】 Printer CANON ADHR19965 10X12INCH OUTGIUA Jobs 0←' } {'2021-3-31 7:24:2 393 [INFO] 【Printer Array】 Printer CANON ADHR24739 10X12 DUOI TRONG Jobs 0←' } {'2021-3-31 7:24:2 440 [INFO] 【Printer Array】 Printer CANON ADHR18526 10X12INCH OUTTREN Start printing!←' } {'2021-3-31 7:24:2 971 [INFO] Print Job 6704654422370495 Status Printing: Printing film 1 of 1←' } {'2021-3-31 7:24:3 486 [INFO] Print Job 6704654422370495 Status Done: Printing Done←' } {'2021-3-31 7:24:3 486 [INFO] Print complete! Filmsize:10INX12IN PrintType:GrayScale Printer: CANON ADHR18526 10X12INCH OUTTREN Paper: 10"x12" 25x30cm ←' } {'2021-3-31 7:25:5 128 [INFO] Print Job 6704655051285743 Status Pending: Preparing films for printing←' } {'2021-3-31 7:25:5 159 [INFO] Print Job 6704655051285743 Status Printing: PrinterIP=192.168.121.103 AETitle=DXWORKS Printing Started←' } {'2021-3-31 7:25:5 206 [INFO] 【Printer Array】 Printer CANON ADHR16810 10X12INCH OUTDUOI Jobs 1←' } {'2021-3-31 7:25:5 222 [INFO] 【Printer Array】 Printer CANON ADHR18526 10X12INCH OUTTREN Jobs 1←' } {'2021-3-31 7:25:5 253 [INFO] 【Printer Array】 Printer CANON ADHR19500 10X12INCH Jobs 0←' } {'2021-3-31 7:25:5 284 [INFO] 【Printer Array】 Printer CANON ADHR19965 10X12INCH OUTGIUA Jobs 0←' } {'2021-3-31 7:25:5 300 [INFO] 【Printer Array】 Printer CANON ADHR24739 10X12 DUOI TRONG Jobs 0←' }
% keep only lines saying 'Printing Done'
C = C(contains(C,'Printing Done'))
C = 5×1 cell array
{'2021-3-31 7:23:46 504 [INFO] Print Job 6704654239889586 Status Done: Printing Done←'} {'2021-3-31 7:24:3 486 [INFO] Print Job 6704654422370495 Status Done: Printing Done←' } {'2021-3-31 7:25:6 409 [INFO] Print Job 6704655051285743 Status Done: Printing Done←' } {'2021-3-31 7:27:7 256 [INFO] Print Job 6704656259440377 Status Done: Printing Done←' } {'2021-3-31 7:27:18 300 [INFO] Print Job 6704656372070258 Status Done: Printing Done' }
% grab the dates/times from those lines
dates = regexp(C,'(\d+-\d+-\d+ \d+:\d+:\d+)','tokens','once');
dates = vertcat(dates{:})
dates = 5×1 cell array
{'2021-3-31 7:23:46'} {'2021-3-31 7:24:3' } {'2021-3-31 7:25:6' } {'2021-3-31 7:27:7' } {'2021-3-31 7:27:18'}

3 件のコメント

Peter Fang
Peter Fang 2022 年 4 月 20 日
May I ask, can I export it to a txt file?
Voss
Voss 2022 年 4 月 20 日
編集済み: Voss 2022 年 4 月 20 日
Sure, you can do this:
fid = fopen('output.txt','w');
fprintf('%s\n',dates{:});
fclose(fid);
Demonstrating with the input txt file from before:
% reading input file
fid = fopen('EX.txt');
data = fread(fid,'*char').';
fclose(fid);
% parsing dates of 'Printing Done'
C = strsplit(data,newline()).';
dates = regexp(C(contains(C,'Printing Done')),'(\d+-\d+-\d+ \d+:\d+:\d+)','tokens','once');
dates = vertcat(dates{:});
% writing dates to output file
fid = fopen('output.txt','w');
fprintf(fid,'%s\n',dates{:});
fclose(fid);
% checking the output file
type('output.txt');
2021-3-31 7:23:46 2021-3-31 7:24:3 2021-3-31 7:25:6 2021-3-31 7:27:7 2021-3-31 7:27:18
Peter Fang
Peter Fang 2022 年 4 月 21 日
thank you very much

サインインしてコメントする。

カテゴリ

ヘルプ センター および File ExchangeFile Operations についてさらに検索

製品

リリース

R2018a

質問済み:

2022 年 4 月 20 日

コメント済み:

2022 年 4 月 21 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by