- In some HTML files, both, the Customer Name and the Transaction ID information is missing.
- The transaction ID has varying length and is sometimes not available
- Sometimes there are multiple transactions.
- etc.
Transaction Data in HTML file
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
v k
el 15 de Mayo de 2020
Comentada: v k
el 16 de Mayo de 2020
Hello, I have a whole bunch of html files in a directory, named transactionData1.html, transactionData2.html and so on. In these HTML files, transaction information is buried with the following parameters of interest :
<b>Customer Name: </b>Michael Henesi<br />
... (some other stuff)
<b>Transaction ID:</b> 21987335670
The transaction ID has varying length and is sometimes not available (no entry in that field). Sometimes there are multiple transactions. Sometimes, the transaction ID is specified as:
<b>Transaction ID: </b>21987335670
that is, the space before transaction ID gets shifted to space after the colon.
In some HTML files, both, the Customer Name and the Transaction ID information is missing.
The objective is to get all the Transaction IDs, along with the Customer Names, from all the files in the directory, in one text file. How can this be done ?
2 comentarios
per isakson
el 15 de Mayo de 2020
You increase your chance to get a useful answer if you upload a few html-files that represent the cases.
Respuesta aceptada
per isakson
el 15 de Mayo de 2020
Editada: per isakson
el 15 de Mayo de 2020
This is a start
%%
sad = dir( 'd:\m\cssm\transData*.txt' );
len = length( sad );
out = cell( len, 2 );
for jj = 1 : len
chr = fileread( fullfile( sad(jj).folder, sad(jj).name ) );
xpr = '<b>Customer Name: <\/b>([^<]+).+<b>Transaction ID:<\/b>\x20*(\d+)';
cac = regexp( chr, xpr, 'tokens' );
if not( isempty( cac{1} ) )
out(jj,:) = cac{:};
end
end
out
It outputs
out =
1×2 cell array
{'Wee Lu'} {'8299045'}
>>
In response to comment
%%
sad = dir( 'd:\m\cssm\transData*.txt' );
len = length( sad );
out = cell( len, 2 );
for jj = 1 : len
chr = fileread( fullfile( sad(jj).folder, sad(jj).name ) );
xpr = '<b>Customer Name: <\/b>([^<]*).*<b>Transaction ID:<\/b>\x20*(\d*)';
cac = regexp( chr, xpr, 'tokens' );
if not(isempty( cac{1}{1} )) && not(isempty( cac{1}{2} ))
out(jj,:) = cac{1};
elseif not(isempty( cac{1}{1} ))
out(jj,1) = cac{1}(1);
out(jj,2) = {'-99'};
elseif not(isempty( cac{1}{2} ))
out(jj,1) = {'---'};
out(jj,2) = cac{1}(2);
else
out(jj,1) = {'---'};
out(jj,2) = {'-99'};
end
end
out
outputs
out =
2×2 cell array
{'Wee Lu' } {'8299045'}
{'Lam Soon'} {'-99' }
>>
6 comentarios
per isakson
el 16 de Mayo de 2020
Editada: per isakson
el 16 de Mayo de 2020
Regular expressions are not trivial. They require concentration, care with the details and reading the documentation carefully. See regexp, Match regular expression (case sensitive). There is a lot on regular expressions on the Internet, e.g. RegEx101. There are many flavors of regular expressions and Matlab has its own, which however is fairly close to PCRE.
Answers
- \x20 stands for space; character with hexadecimal value 20.
- * zero or more times of previous "item"
- () capture tokens; keeps what's in the parentheses for the output
- [^<] anything except for <
The Matlab documentation explains this much better than I do!
Más respuestas (0)
Ver también
Categorías
Más información sobre Time Series Objects en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!