Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: leggere file .txt

  1. #1

    leggere file .txt

    Salve
    Ho un problema che, sono sicuro, apparentemente difficile:








    sul server ho un file.txt che contiene un semplice array: [1,5,8,23]
    questo file viene utilizzato e modificato da molte pagine php e non è possibile cambiarlo.
    ora vorrei farlo leggere ed elaborare da uno script javascript al posto di quello var blocco scritto direttamente nello script:
    codice HTML:
    <script type="text/javascript">
    var blocco = [1,5,8,23];
    
    n=10;
    document.getElementById('fo').innerHTML=blocco[n];
    </script>
    come posso fare?
    Grazie in anticipo

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,373
    Quote Originariamente inviata da claudio dionisi Visualizza il messaggio
    sul server ho un file.txt che contiene un semplice array: [1,5,8,23]
    questo file viene utilizzato e modificato da molte pagine php e non è possibile cambiarlo.
    ora vorrei farlo leggere ed elaborare da uno script javascript al posto di quello var blocco scritto direttamente nello script:
    [...]
    Puoi usare quella tecnologia ormai pluridecennale e impiegata nella quasi totalità dei siti Web: AJAX.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Come dice Alka, lato browser/client NON puoi leggere direttamente roba dal server come puoi fare ad esempio con Php, Java, Perl ecc.
    Al massimo puoi richiedere una risorsa al server ed elaborarla in qualche modo ma sempre e comunque prima la chiedi al server remoto (tramite get/post) e poi la usi con Js.
    Ripeto, non puoi usarla direttamente se prima non l'hai caricata.

    Il modo più semplice è usare ajax, come suggerisce Alka.

    Un altro modo, vista la semplicità ella struttura del file/dei dati, è caricarne il valore in un indice del LocalStorage e poi, ogni volta che ti serve, manipolarlo direttamente dal Js senza passare da ajax o altri metodi.
    Il problema può nascere nel momento in cui i valori di quel array devono essere sempre gli stessi per ogni utente. Intendo dire...
    Il primo cliente elabora qualcosa e recupera i valori 1, 4, 98. Fa un'operazione qualsiasi e modifica i valori in 3,24,77. SE e SOLO SE il secondo utente si deve trovare in partenza 3, 24, 77 ALLORA dovrai implementare qualcosa lato server che "aggiorna" la chiave del LocalStorage, il che ovviamente rende più pratico l'uso di Ajax
    Ultima modifica di Dascos; 28-04-2023 a 15:34

  4. #4
    Il file .txt viene modificato solo dalle pagine .php lo script javascript serve solo per leggerlo ed elaborarlo [sommando tutti gli elementi tra loro] per poi scrivere il risultato nella pagina e quindi non posso fare un Localstorage.
    Potrei farlo con il PHP ma con javascript sarebbe aggiornabile senza ricaricare l'intera pagina; non conosco Ajax e quindi confermo che era irrisovibile.

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,373
    Quote Originariamente inviata da claudio dionisi Visualizza il messaggio
    Il file .txt viene modificato solo dalle pagine .php lo script javascript serve solo per leggerlo ed elaborarlo [sommando tutti gli elementi tra loro] per poi scrivere il risultato nella pagina e quindi non posso fare un Localstorage.
    Ok, quindi si tratta banalmente di scaricare un file di testo statico dal server (chi lo aggiorna e perché, è irrilevante ai fini della risoluzione di questo problema).

    Quote Originariamente inviata da claudio dionisi Visualizza il messaggio
    Potrei farlo con il PHP ma con javascript sarebbe aggiornabile senza ricaricare l'intera pagina
    Infatti qui PHP non c'entra nulla. Nella pagina HTML che deve fare uso dei dati va codificato uno script in linguaggio JavaScript che vada a prendersi quel file di testo e lo mostri dinamicamente nella pagina, all'interno dell'elemento che preferisci.

    Quote Originariamente inviata da claudio dionisi Visualizza il messaggio
    non conosco Ajax e quindi confermo che era irrisovibile.
    Se leggi la guida che ti ho segnalato, la tua problematica è il primo degli esempi in assoluto di cui viene mostrata la soluzione.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  6. #6
    Ho provato quella soluzione ma mi legge il file.txt come una stringa di testo e non come un Array; ho separato la stringa ma rimane sempre un array di stringhe e non un array di numeri come serve allo script che vorrei fare.
    codice:
    const xhttp = new XMLHttpRequest();
    xhttp.open("GET", "visti.txt");
    xhttp.send();
    xhttp.onload = function() {file = this.responseText;
    const blocco = file.split(",");
    document.getElementById("demo").innerHTML = blocco[1]+blocco[2]}

  7. #7
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,726
    Quote Originariamente inviata da claudio dionisi
    mi legge il file.txt come una stringa di testo
    Ciao, è la normalità, cosa ti aspetti di ricavare da un file .txt? Non saranno forse dei dati testuali?
    Qualsiasi risposta ti arrivi da una chiamata AJAX, è di per se una stringa testuale di dati. Che poi i dati siano rappresentati nel formato x piuttosto che y, sarà comunque una stringa di testo.

    Quello che dovrai fare è appunto un "parsing" di quella stringa di testo, in modo da prelevare e "convertire" i dati nel formato più opportuno secondo le esigenze; esattamente come hai iniziato a fare.

    Con lo split() chiaramente ottieni un array di valori testuali, potresti poi ciclare gli elementi di quell'array (ad esempio usando map()) in modo da "convertirli" in tipo numerico. Fai attenzione però, perché se la stringa contiene anche le parentesi quadre (relativamente alla sintassi usata per rappresentare l'array nella stringa di testo), il solo split te le lascia come fossero parte dei dati. In tal caso dovresti prevedere di eliminare in qualche modo eventuali caratteri che non servono.

    Se sei sicuro che il formato rappresentato sia un array (o comunque un formato JSON) puoi usare il metodo parse() dell'oggetto JSON, che farebbe tutto il lavoro sporco.

    codice:
    const blocco = JSON.parse(file);

    Fai sapere se così può andare bene.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  8. #8
    Perfetto!
    codice:
    const xhttp = new XMLHttpRequest();
    xhttp.open("GET", "visti.txt");
    xhttp.send();
    xhttp.onload = function() {file = this.responseText;
    const blocco = JSON.parse(file);
    sum = 0;
    for (let i = 0; i < blocco.length; i++) {sum += blocco[i];}
    document.getElementById("demo").innerHTML = sum}
    Questo script mi da la somma di tutti gli elementi dell'array!
    Grazie!

  9. #9
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,726
    Quote Originariamente inviata da claudio dionisi
    Questo script mi da la somma di tutti gli elementi dell'array!
    Ottimo

    Se può interessarti, qui una soluzione più stringata, usando delle promise con fatch e relativi metodi per recuperare i dati dal file txt e reduce() per elaborare la somma:
    codice:
    (async () => {
      const data = await (await fetch('visti.txt')).json();
      document.getElementById("demo").innerHTML = data.reduce((a, b) => a + b, 0);
    })();

    Il risultato è comunque equivalente in entrambe i casi.

    Buon proseguimento
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  10. #10
    codice:
    function somma(){(async() => {const data = await(await fetch('visti.txt')).json();
      document.getElementById("demo").innerHTML = data.reduce((a, b) => a + b, 0);})();}
    setInterval(somma, 1000);
    PERFETTO!
    In questo modo analizza il file ogni secondo e visualizza l'andamento.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.