Skrypt zapisujący 4 linijki tekstu z otwartej strony do pliku tekstowego.

0

Panowie, szukam skryptu, który po otwarciu mojego pliku index.html na serwerze, zawierającego dosłownie 4 krótkie linijki tekstu, automatycznie zapisze na dysku te 4 linijki tekstu (czyli całą zawartość strony) do pliku tekstowego o zdefiniowanej w skrypcie nazwie. Pomożecie?

0

po otwarciu mojego pliku index.html na serwerze

Co to niby znaczy?

0

Plik index.html wyświetlający 4 linijki tekstu wrzucam na serwer, następnie w przeglądarce wpisuję adres np mojastrona.pl, który wyświetla w przeglądarce to co jest zapisane w tym pliku.
Szukam skryptu, który po wejściu na tę stronę, automatycznie zapisze mi te 4 linijki do pliku .txt

0

Na linuksie wystarczy coś takiego:

 curl https://4programmers.net/Forum/JavaScript/285860-skrypt_zapisujacy_4_linijki_tekstu_z_otwartej_strony_do_pliku_tekstowego > strona.txt

(rozszerzenie oczywiście dowolne)

Na windowsie musisz zobaczyć, czy coś takiego zadziała.

0

Wybaczcie Panowie, ale na co dzień zajmuję się w większości aplikacjami desktopowymi, więc być może nie do końca jasno się wyraziłem z racji tego, że nie znam się za bardzo na tym o co tu pytam.
Szukam czegoś podobnego w działaniu jak to:

<html>
<body>

Linia tekstu 1<br> 
Linia tekstu 2<br>
Linia tekstu 3<br>
Linia tekstu 4<br>
<br>
<br>

<table>
    <tr><td>Text to Save:</td></tr>
    <tr>
        <td colspan="3">
            <textarea id="inputTextToSave" cols="80" rows="25"></textarea>
        </td>
    </tr>
    <tr>
        <td>Filename to Save As:</td>
        <td><input id="inputFileNameToSaveAs"></input></td>
        <td><button onclick="saveTextAsFile()">Save Text to File</button></td>
    </tr>
    <tr>
        <td>Select a File to Load:</td>
        <td><input type="file" id="fileToLoad"></td>
        <td><button onclick="loadFileAsText()">Load Selected File</button><td>
    </tr>
</table>


 
<script type="text/javascript">


 
function saveTextAsFile()
{
    var textToSave = document.getElementById("inputTextToSave").value;
    var textToSaveAsBlob = new Blob([textToSave], {type:"text/plain"});
    var textToSaveAsURL = window.URL.createObjectURL(textToSaveAsBlob);
    var fileNameToSaveAs = document.getElementById("inputFileNameToSaveAs").value;
 
    var downloadLink = document.createElement("a");
    downloadLink.download = fileNameToSaveAs;
    downloadLink.innerHTML = "Download File";
    downloadLink.href = textToSaveAsURL;
    downloadLink.onclick = destroyClickedElement;
    downloadLink.style.display = "none";
    document.body.appendChild(downloadLink);
 
    downloadLink.click();
}
 
function destroyClickedElement(event)
{
    document.body.removeChild(event.target);
}
 
function loadFileAsText()
{
    var fileToLoad = document.getElementById("fileToLoad").files[0];
 
    var fileReader = new FileReader();
    fileReader.onload = function(fileLoadedEvent) 
    {
        var textFromFileLoaded = fileLoadedEvent.target.result;
        document.getElementById("inputTextToSave").value = textFromFileLoaded;
    };
    fileReader.readAsText(fileToLoad, "UTF-8");
}
 
</script>
 
</body>
</html> 

Z tym, że tutaj, jest pole tekstowe, w którym trzeba wpisać jakiś tekst, następnie podać nazwę pliku i kliknąć button.
Nie potrafię sobie tego przerobić tak, aby nie było żadnych buttonów i pól tekstowych, tylko pierwsze 4 linie tekstu (tak jak wrzuciłem do tego przykładu).
Zależy mi na tym, żeby po otwarciu tego pliku, te 4 linie automatycznie zapisały się do pliku .txt, którego nazwa będzie stała, zdefiniowana przeze mnie w kodzie.

1

Sprawdź czy na czymś takim Ci zależało.
W zmiennych definiujesz nazwę pliku, tag HTML, z którego chcesz zaczytywać dane oraz liczbę linijek tekstu.

<script type="text/javascript">
 
window.onload = function saveTextAsFile() {

  //--------- SETTINGS -------------
  var fileNameToSaveAs = 'filename',
      sourceHTMLTag = 'body',
      numberOfLines = 4;
  //--------------------------------

  var textToSave = document.getElementsByTagName(sourceHTMLTag)[0].innerHTML;

  var arrayOfLines = textToSave.trim()
                      .split("\n")
                      .slice(0, numberOfLines)
                      .join('\n');                  

  var textToSaveAsBlob = new Blob([arrayOfLines], {type:"text/plain"});
  var textToSaveAsURL = window.URL.createObjectURL(textToSaveAsBlob);

  var downloadLink = document.createElement("a");
  downloadLink.download = fileNameToSaveAs;
  downloadLink.innerHTML = "Download File";
  downloadLink.href = textToSaveAsURL;
  downloadLink.style.display = "none";
  document.body.appendChild(downloadLink);

  downloadLink.click();
}
 
</script>
0

Dzięki za odpowiedź.

To co mi przesłałeś zapisuje pięknie plik, ale razem ze znacznikami (w tym przypadku < br >), a nie to co się wyświetla na ekranie przeglądarki, a mi właśnie zależy, żeby zapisywało się to, co użytkownikowi wyświetla się na ekranie przeglądarki.
Wnioskuję, że twój skrypt zapisuje mi 4 pierwsze linijki kodu źródłowego tego pliku html, a nie to co to ten kod wyświetla na ekranie.

Istnieje prawdopodobieństwo, że to ja coś pochrzaniłem. Rzucisz okiem?

<html>
<body>

Linia1 <br>
Linia2 <br>
Linia3 <br>
Linia4 <br>


<script type="text/javascript">

window.onload = function saveTextAsFile() {

  //--------- SETTINGS -------------
  var fileNameToSaveAs = 'filename',
      sourceHTMLTag = 'body',
      numberOfLines = 4;
  //--------------------------------

  var textToSave = document.getElementsByTagName(sourceHTMLTag)[0].innerHTML;

  var arrayOfLines = textToSave.trim()
                      .split("\n")
                      .slice(0, numberOfLines)
                      .join('\n');                  

  var textToSaveAsBlob = new Blob([arrayOfLines], {type:"text/plain"});
  var textToSaveAsURL = window.URL.createObjectURL(textToSaveAsBlob);

  var downloadLink = document.createElement("a");
  downloadLink.download = fileNameToSaveAs;
  downloadLink.innerHTML = "Download File";
  downloadLink.href = textToSaveAsURL;
  downloadLink.style.display = "none";
  document.body.appendChild(downloadLink);

  downloadLink.click();
}

</script>
</body>
</html>
1

Nic nie pochrzaniłeś - nie wspomniałeś po prostu, że tagi mają być wywalane.
Spróbuj podmienić zmienne textToSave oraz arrayOfLines na:

  var textToSave = document.getElementsByTagName(sourceHTMLTag)[0].innerText;

  var arrayOfLines = textToSave.trim()
                      .split('\n')
                      .slice(0, numberOfLines)
                      .join('\n');   
0

Działa tak jak tego oczekiwałem.

Wielkie dzięki za pomoc!

1 użytkowników online, w tym zalogowanych: 0, gości: 1