MagicMirror Forum
    • Recent
    • Tags
    • Unsolved
    • Solved
    • MagicMirror² Repository
    • Documentation
    • 3rd-Party-Modules
    • Donate
    • Discord
    • Register
    • Login
    A New Chapter for MagicMirror: The Community Takes the Lead
    Read the statement by Michael Teeuw here.

    .txt file include

    Scheduled Pinned Locked Moved Troubleshooting
    59 Posts 6 Posters 39.0k Views 6 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • S Do not disturb
      sdetweil @banbutcher
      last edited by

      @banbutcher you will have to replace the line feeds (\n) with html breaks (
      )

      Sam

      How to add modules

      learning how to use browser developers window for css changes

      1 Reply Last reply Reply Quote 0
      • B Offline
        banbutcher
        last edited by

        hi again,

        im after getting my script to update my txt file with the names of downloaded movies and tv series… how would i go about reading the title of the series and just having the title and info ie:

        if title has S**E** in it then
        filename - Archer S01E01pilot 1080p x265.mkv
        desired result - Archer S01E01

        else its a movie and just add movie name

        i think this is the bit of code im to edit but i havent got it working :(

        	getDom: function(){
        		var wrapper = document.createElement("div");
        		if(this.dataFile){
                                var meldungRegExp = /Meldung (.*?) /ig;
                                var meldung = meldungRegExp.exec(this.dataFile)[1];
        
        
                                var zoneRegExp = /Zone (.*?) /ig;
                                var zone = zoneRegExp.exec(this.dataFile)[1];
        
        			var zeitRegExp = /Zeit (.*?) /ig;
        			var zeit = zeitRegExp.exec(this.dataFile)[1];
        			wrapper.innerHTML = "Meldung: " + meldung + " Zone: " + zone + " Zeit: " + zeit;
        		} else {
        			wrapper.innerHTML = "No Data";
        		}
        		return wrapper;
        	}
        });
        

        thanks

        Richie

        S 1 Reply Last reply Reply Quote 0
        • S Do not disturb
          sdetweil @banbutcher
          last edited by sdetweil

          @banbutcher said in .txt file include:

          Archer S01E01pilot 1080p x265.mkv

          using the regex tester,
          https://regex101.com/

          I think this is the regex u want

          /.*[S][(0-9)]+[E][(0-9)]+/
          

          Sam

          How to add modules

          learning how to use browser developers window for css changes

          1 Reply Last reply Reply Quote 0
          • B Offline
            banbutcher
            last edited by banbutcher

            @sdetweil

            that worked great…

            however, im a little bit stuck again… your expression works fine and return the correct result but only on the first line of the file and only if i remove the [1] from the end of line 5 of the code

            	getDom: function(){
            		var wrapper = document.createElement("div");
            		if(this.dataFile){
                                    var splitRegExp = /.*[S][(0-9)]+[E][(0-9)]+/ig;
                                    var split = splitRegExp.exec(this.dataFile)[1];
            
            			wrapper.innerHTML = split;
            		} else {
            			wrapper.innerHTML = "No Data";
            		}
            		return wrapper;
            	}
            

            do i need to stick it in some kind of loop? or am i reading the contents of file wrong?

            again thanks for your help :)

            S 1 Reply Last reply Reply Quote 0
            • S Do not disturb
              sdetweil @banbutcher
              last edited by

              @banbutcher is dataFile an array of filenames? then yes, you’ll need a loop.
              so, you are moving part of name a, to a new array
              then part of name b to the next slot in the array

              array.push(item)
              adds item to the end of the array

              name_of_array =[] initializes name_of_array to be an empty array

              then u will need to format the array of partial names

              var x = name_of_array.join(separator)
              will turn the array into x, a string with separator between the names

              Sam

              How to add modules

              learning how to use browser developers window for css changes

              1 Reply Last reply Reply Quote 0
              • B Offline
                banbutcher
                last edited by

                Band.Of.Brothers.E01.1080p.5.1Ch.BluRay.ReEnc-DeeJayAhmed.srt <br>
                Archer S01E03 Diversity Hire (1080p x265 10bit S94 Joy).mkv <br>
                devs.s01e02.720p.hdtv.x264-river[eztv].mkv <br>
                What.We.Do.in.the.Shadows.S02E02.Ghosts.720p.AMZN.WEBRip.DDP5.1.x264-NTb[eztv.io].mkv <br>
                What.We.Do.in.the.Shadows.S02E01.Resurrection.720p.AMZN.WEBRip.DDP5.1.x264-NTb[eztv.io].mkv <br>
                

                this is the file im reading from… im not sure if thats an array, sorry and i want them outputted same line by line just missing the trailing parts.

                again thanks for your help :)

                S 1 Reply Last reply Reply Quote 0
                • S Do not disturb
                  sdetweil @banbutcher
                  last edited by

                  @banbutcher reading how

                  Sam

                  How to add modules

                  learning how to use browser developers window for css changes

                  1 Reply Last reply Reply Quote 0
                  • B Offline
                    banbutcher
                    last edited by banbutcher

                    this is my main module .js

                    i think this is where im reading from :/

                    Module.register("deluge",{
                    	defaults: {
                    		updateInterval: 10 * 60 * 1000 //reads the file every 10 mins
                    	},
                    
                    	start: function(){
                    		this.sendSocketNotification("START", this.config);
                    	},
                    
                    	socketNotificationReceived: function(notification, payload) {
                    		if(notification === "DATA"){
                    			this.dataFile = payload;
                    			this.updateDom();
                    		}
                    	},
                    
                    //	getDom: function(){
                    //		var wrapper = document.createElement("div");
                    //		if(this.dataFile){
                    //			wrapper.innerHTML = this.dataFile;
                    //		} else {
                    //			wrapper.innerHTML = "No data";
                    //		}
                    //		return wrapper;
                    //	}
                    
                    
                    
                    
                    	getDom: function(){
                    		var wrapper = document.createElement("div");
                    		if(this.dataFile){
                                            var splitRegExp = /.*[S][(0-9)]+[E][(0-9)]+/ig;
                                            var split = splitRegExp.exec(this.dataFile);
                    
                    			wrapper.innerHTML = split;
                    		} else {
                    			wrapper.innerHTML = "No Data";
                    		}
                    		return wrapper;
                    	}
                    
                    
                    
                    });
                    

                    again thanks for your help :)

                    im in way overmy head here!

                    S 2 Replies Last reply Reply Quote 0
                    • S Do not disturb
                      sdetweil @banbutcher
                      last edited by

                      @banbutcher reading in the node_helper, sending up to the module.

                      Sam

                      How to add modules

                      learning how to use browser developers window for css changes

                      1 Reply Last reply Reply Quote 0
                      • B Offline
                        banbutcher
                        last edited by

                        Node_helper :)

                        const NodeHelper = require("node_helper");
                        const fs= require("fs");
                        
                        module.exports = NodeHelper.create({
                        //here comes the part of the nodehelper after the 3 dots as posted above
                        
                        	socketNotificationReceived: function(notification, payload) {
                        		if(notification === "START"){
                        			this.config = payload;
                        			this.readData();
                            			setInterval(() => {
                                			this.readData();
                            			}, this.config.updateInterval);
                        		}
                        	},
                        
                        	readData: function(){
                        		//to read a file to do the following
                        		fs.readFile("new-tv-list.txt", "utf8", (err, data) => {
                        			if (err) throw err;
                        			this.sendSocketNotification("DATA", data);
                        		});
                        	}
                        });
                        
                        1 Reply Last reply Reply Quote 0
                        • S Do not disturb
                          sdetweil @banbutcher
                          last edited by

                          @banbutcher I won’t have time to look at this tonight

                          Sam

                          How to add modules

                          learning how to use browser developers window for css changes

                          B 1 Reply Last reply Reply Quote 0
                          • B Offline
                            banbutcher @sdetweil
                            last edited by

                            @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:

                            S 1 Reply Last reply Reply Quote 0
                            • S Do not disturb
                              sdetweil @banbutcher
                              last edited by sdetweil

                              @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 structure

                              var 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 {
                              

                              Sam

                              How to add modules

                              learning how to use browser developers window for css changes

                              S 1 Reply Last reply Reply Quote 0
                              • S Do not disturb
                                sdetweil @sdetweil
                                last edited by

                                @banbutcher

                                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;
                                

                                Sam

                                How to add modules

                                learning how to use browser developers window for css changes

                                1 Reply Last reply Reply Quote 0
                                • B Offline
                                  banbutcher
                                  last edited by

                                  @sdetweil

                                  Awesome i will try and get it working tonight!

                                  Thanks,

                                  Richie

                                  1 Reply Last reply Reply Quote 0
                                  • B Offline
                                    banbutcher
                                    last edited by

                                    @sdetweil

                                    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

                                    S 1 Reply Last reply Reply Quote 0
                                    • S Do not disturb
                                      sdetweil @banbutcher
                                      last edited by sdetweil

                                      @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 {
                                      

                                      Sam

                                      How to add modules

                                      learning how to use browser developers window for css changes

                                      1 Reply Last reply Reply Quote 0
                                      • B Offline
                                        banbutcher
                                        last edited by sdetweil

                                        @sdetweil

                                        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";
                                        		}
                                        
                                        S 1 Reply Last reply Reply Quote 0
                                        • S Do not disturb
                                          sdetweil @banbutcher
                                          last edited by sdetweil

                                          @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)
                                          

                                          Sam

                                          How to add modules

                                          learning how to use browser developers window for css changes

                                          S 1 Reply Last reply Reply Quote 0
                                          • B Offline
                                            banbutcher
                                            last edited by

                                            @sdetweil

                                            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 :)

                                            1 Reply Last reply Reply Quote 0

                                            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
                                            • 1
                                            • 2
                                            • 3
                                            • 1 / 3
                                            • First post
                                              Last post
                                            Enjoying MagicMirror? Please consider a donation!
                                            MagicMirror created by Michael Teeuw.
                                            Forum managed by Sam, technical setup by Karsten.
                                            This forum is using NodeBB as its core | Contributors
                                            Contact | Privacy Policy