How to input a file, and then filter it and output the result into a textarea?

Viewed 127

I have the following code that you can upload a Javascript file and it removes all comments from the document. This works perfectly. However below that I have two textareas. One is where the user pastes their code, and the same function to remove all comments is run on that code and the updated code is pasted in the other textarea. However the result comes out as undefined. What is wrong with my code. Please help me!

function fileUploaded() {
  var myUploadedFile = document.getElementById("myFile").files[0];
  var reader = new FileReader();
  reader.readAsText(myUploadedFile, "UTF-8");
  reader.onload = function(evt) {
    var documentNew = evt.target.result.replace(/(\r\n|\n|\r)/gm, "\n");

    document.getElementById("myFile").addEventListener("change", fileUploaded, false);

    var str = documentNew;
    var lines = str.split('\n');

    var filterred = lines.filter(function(line) {
      return line.indexOf('//') != 0;
    });

    filterred = String(filterred).replace(/;/g, "; \n");

    $("#answerDocument1").html(filterred);
  };
};
document.getElementById("myFile").addEventListener("change", fileUploaded, false);
$("#doc").keyup(function(evt) {
  var doc = $("doc").html();
  var documentNew = String(doc).replace(/(\r\n|\n|\r)/gm, "\n");

  var str = documentNew;
  var lines = str.split('\n');

  var filterred = lines.filter(function(line) {
    return line.indexOf('//') != 0;
  });

  filterred = String(filterred).replace(/;/g, "; \n");

  $("#answerDocument2").html(documentNew);
});
textarea {

  width: 100px;
  height: 100px;

}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h3>Upload A Javascript Document</h3>
<input type="file" id="myFile">
<textarea id="answerDocument1"></textarea>
<br><br>
<hr>
<br><br>
<textarea id="doc"></textarea>
<textarea id="answerDocument2" readonly></textarea>

1 Answers

I have used...

filterred = filterred.join("").replace(/;/g, "; \n");

Instead of...

filterred = String(filterred).replace(/;/g, "; \n");

Because filterred is an array, and not a string, and if you convert it into a string it comes out joined by commas.

I have also used $("#doc").val(); instead of $("doc").html();, because it is the value of the <textarea></textarea> that I am getting. That makes the undefined message go away.

function fileUploaded() {
  var myUploadedFile = document.getElementById("myFile").files[0];
  var reader = new FileReader();
  reader.readAsText(myUploadedFile, "UTF-8");
  reader.onload = function(evt) {
    var documentNew = evt.target.result.replace(/(\r\n|\n|\r)/gm, "\n");
    var str = documentNew;
    var lines = str.split('\n');

    var filterred = lines.filter(function(line) {
      return line.indexOf('//') != 0;
    });

    
    filterred = filterred.join("").replace(/;/g, "; \n");
    $("#answerDocument1").html(filterred);
  };
};
document.getElementById("myFile").addEventListener("change", fileUploaded, false);
$("#doc").keyup(function(evt) {
  var doc = $("#doc").val();
  var documentNew = String(doc).replace(/(\r\n|\n|\r)/gm, "\n");
  var str = documentNew;
  var lines = str.split('\n');

  var filterred = lines.filter(function(line) {
    return line.indexOf('//') != 0;
  });

  filterred = filterred.join("").replace(/;/g, "; \n");
  $("#answerDocument2").html(filterred);
});
textarea {
  width: 150px;
  height: 150px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h3>Upload A Javascript Document</h3>
<input type="file" id="myFile">
<textarea id="answerDocument1"></textarea>
<br><br>
<hr>
<br><br>
<h3>Paste Code</h3>
<textarea id="doc"></textarea>
<h3>Copy Formatted Code</h3>
<textarea id="answerDocument2" readonly></textarea>

Related