Read the statement by Michael Teeuw here.
.txt file include
-
@banbutcher I won’t have time to look at this tonight
-
@sdetweil
not a problem at all, i really appreciate your help so far in this topic and every other question ive had across the board! :thumbs_up_light_skin_tone: -
@banbutcher ok, the fs.readFile() returns ALL the content of the file. I still would remove the utf8.
but you want a list of names, not a stream of characters…
so you need to split the stream into an array.a list of text ‘lines’ has a character after each, called a line feed, we don’t want those
but the last filename MAY or MAY NOT be followed by a line feed. (depends on how the file was created)
anyhow we can fix that
I would change the readData function in node_helper like this
readData: function(){ //to read a file to do the following fs.readFile("new-tv-list.txt", (err, data) => { var output_data = null // if there was no error if (!err){ // convert byte stream to array of names output_data=data.toString().concat("\n").split('\n') } // always send something back to module, so it can display messages // might be null if there was an error this.sendSocketNotification("DATA", output_data); }); }
then to fix the module side
build an html table structurevar wrapper = document.createElement("div"); if(this.dataFile){ var output_list= []; // setup regex, no i no g (only once, and case sensitive) var splitRegExp = /.*[S][(0-9)]+[E][(0-9)]+/; // loop thru the list of filenames for(filename of this.dataFile) { // if the name is not zero length (split could have returned for just linefeed if(filename.length >0) { // get the filename prefix var split = splitRegExp.exec(filename); // save name to the output list, as a table entry // remove space after the ->< , the forum hides everything after unless a space // table has a row, output_list.push("< tr>< td>") // with data output_list.push(split) // end of data and row output_list.push("< /td>< /tr>") } } // insert the table into the wrapper wrapper.innerHTML = "< table>" + output_list.join('')+ "< /table>"; } else {
-
you can also you divs instead of a table, and then set a css style
‘display’:‘inline-flex’
‘flex-direction’:‘vertical’and u can also use code to create the tree instead of text (don’t use the output_list anymore)
(and u can use this with divs too, don’t need as many elements)var table=document.createElement("table") wrapper.appendChild(table) for(filename of this.dataFile) { // if the name is not zero length (split could have returned for just linefeed if(filename.length >0) { // get the filename prefix var tr=document.createElement("tr") table.appendChild(tr) var td=document.createElement("td") tr.appendChild(td) var split = splitRegExp.exec(filename); td.innerText=split } } return wrapper;
-
-
wow… works like a charm! lists all tv shows perfectly! :)
is there any way to print a line if the regex isn’t met… ie like a movie title instead of a series title with s01e03 attached?
and possibly limit output to 10 lines?Thanks,
Richie
-
@banbutcher >is there any way to print a line if the regex isn’t met… ie like a movie title instead of a series title with s01e03 attached?
and possibly limit output to 10 lines?sure
// should make this a config variable by adding to module defaults // then would be this.config.counter // get display limit, 10 if not specified in defaults var counter=this.config.counter || 10 var table=document.createElement("table") wrapper.appendChild(table) for(filename of this.dataFile) { // if the name is not zero length (split could have returned for just linefeed // and the view limit has not been reached if(filename.length >0 && counter>0) { // get the filename prefix var tr=document.createElement("tr") table.appendChild(tr) var td=document.createElement("td") tr.appendChild(td) var split = splitRegExp.exec(filename); if(split) td.innerText=split else td.innerText='name not matched '+ filename counter--; } } return wrapper;
or using the text form
var wrapper = document.createElement("div"); if(this.dataFile){ var output_list= []; // should make this a config variable by adding to module defaults // then would be this.config.counter // get display limit, 10 if not specified in defaults var counter=this.config.counter || 10 // setup regex, no i no g (only once, and case sensitive) var splitRegExp = /.*[S][(0-9)]+[E][(0-9)]+/; // loop thru the list of filenames for(filename of this.dataFile) { // if the name is not zero length (split could have returned for just linefeed if(filename.length >0 && counter >0) { // get the filename prefix var split = splitRegExp.exec(filename); // save name to the output list, as a table entry // remove space after the ->< , the forum hides everything after unless a space // table has a row, output_list.push("< tr>< td>") // with data if(split) output_list.push(split) else output_list.push('name not matched '+ filename) // end of data and row output_list.push("< /td>< /tr>") counter--; } } // insert the table into the wrapper wrapper.innerHTML = "< table>" + output_list.join('')+ "< /table>"; } else {
-
the counter part worked great, but then when i tried to add it if loop for the name check, im getting “no data” maybe i messed up copying across?
var output_list= []; var counter=this.config.counter || 11 // setup regex, no i no g (only once, and case sensitive) var splitRegExp = /.*[S][(0-9)]+[E][(0-9)]+/; // loop thru the list of filenames for(filename of this.dataFile) { // if the name is not zero length (split could have returned for just linefeed if(filename.length >0 && counter>0) { // get the filename prefix var split = splitRegExp.exec(filename); // save name to the output list, as a table entry // table has a row, output_list.push("<tr><td>") // with data if(split ) output_list.push(split) else output_list.push('name not found:'+ filename) // end of data and row output_list.push("</td></tr>") counter--; } } // insert the table into the wrapper wrapper.innerHTML = "<table>" + output_list.join('')+ "</table>"; } else { wrapper.innerHTML = "No Data"; }
-
@banbutcher said in .txt file include:
im getting “no data” maybe i messed up copying across?
sorry, don’t understand the words…
this is the test if the regex worked
if(split) output_list.push(split) else output_list.push('name not found:'+ filename)
-
this code works…
if(this.dataFile){ var output_list= []; var counter=this.config.counter || 11 // setup regex, no i no g (only once, and case sensitive) var splitRegExp = /.*[S][(0-9)]+[E][(0-9)]+/; // loop thru the list of filenames for(filename of this.dataFile) { // if the name is not zero length (split could have returned for just linefeed if(filename.length >0 && counter>0) { // get the filename prefix var split = splitRegExp.exec(filename); // save name to the output list, as a table entry // table has a row, output_list.push("<tr><td>") // with data output_list.push(split) // end of data and row output_list.push("</td></tr>") counter--; } } // insert the table into the wrapper wrapper.innerHTML = "<table>" + output_list.join('')+ "</table>"; } else {
this code doesnt…
var output_list= []; var counter=this.config.counter || 11 // setup regex, no i no g (only once, and case sensitive) var splitRegExp = /.*[S][(0-9)]+[E][(0-9)]+/; // loop thru the list of filenames for(filename of this.dataFile) { // if the name is not zero length (split could have returned for just linefeed if(filename.length >0 && counter>0) { // get the filename prefix var split = splitRegExp.exec(filename); // save name to the output list, as a table entry // table has a row, output_list.push("<tr><td>") // with data if(split.length >0 ) output_list.push(split) else output_list.push('name not found:'+ filename) // end of data and row output_list.push("</td></tr>") counter--; } } // insert the table into the wrapper wrapper.innerHTML = "<table>" + output_list.join('')+ "</table>"; } else { wrapper.innerHTML = "No Data"; }
Richie :)