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 :)
-
my fault… I ‘assumed’ that regex would return an empty string… it returns a null value…
I fixed my sample, and your paste with the correct test
if(split)instead of
if(split.length>0) -
and for others trying to implement code, you can debug using the developers console, OR make little sample files and run them directly in node
i named this testit.js in the user home folder (~/testit.js)
var dataFile=["Archer S01E02Someshow.tv", "Archer S01E03Someshow .tv", "Archer S01e02Someshow .tv", "Archer S01E04Someshow .tv", "Archer S01E05someshow .tv", "Archer s01E02Someshow .tv", "Archer S01E09Someshow .tv", ] var counter1=10 if(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=counter1 || 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 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 console.log( "<table>" + output_list.join('')+ "</table>");and then
cd ~ node testit.js -
Perfect!!
now i can go to bed! :D tomorrows task will be styling with css! any pointers?
as always… thanks again!!
Richie
-
@banbutcher said in .txt file include:
styling with css! any pointers
sorry, that is my weakness… I cannot make anything look good… I can tell you if it DOES look good, but cannot do it myself… I have no eye for that all…
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login