Come gestire la modifica di un file di grandi dimensioni per un utente non tecnico

1

Ho un cliente a cui viene fornito un file .txt delimitato da tabulazioni contenente centinaia di migliaia di righe.

Ho una storia utente come segue:

As a user I want to take the text file and add a new value at the end of each line which contains the concatenated value of two of the columns.

ad esempio se il file è stato letto

text_one    text_two

Ho bisogno di mostrare quanto segue (preferibilmente in un file .txt)

text_one    text_two    text_onetext_two

Il mio primo approccio era chiedere al fornitore che fornisce il file per effettuare la concatenazione prima di fornire il file, il modo più semplice per risolvere un problema è eliminarlo correttamente? tuttavia sono molto poco collaborativi e il punto è rifiutato.

Ho cercato di creare una semplice applicazione javascript che faccia questo lato client in modo che un utente non tecnico possa selezionare il file usando un selettore di file. Questo approccio ha alcuni problemi

  • Il file potrebbe avere dimensioni superiori a GB e quindi non può essere caricato direttamente nella memoria, ho provato e il browser si blocca
  • Non c'è modo di scrivere un file in javascript, quindi ho bisogno di mostrare il contenuto sullo schermo e di salvarlo dall'utente (in qualche modo)

Stavo pensando che se potessi aggirare le limitazioni di filesize potrei semplicemente pubblicare il contenuto modificato nella pagina e fare in modo che l'utente salvi la pagina come file .txt, tuttavia penso che ci sia un modo migliore di usare javascript che ancora ospitare la mancanza di know-how tecnico degli utenti.

Per favore considera questa domanda come una pila agnostica, ma tieni presente che un simpatico script di shell o script python sarebbe considerato non adatto per un utente non tecnico a meno che non ci sia un modo per "confezionarlo" bene per un non tecnico utente.

Aggiornamenti

Il file è troppo grande per essere aperto in Excel. Il processo deve essere eseguito settimanalmente, ma non richiede programmazione o automazione ... (ancora)

    
posta Luke 05.11.2013 - 12:03
fonte

2 risposte

2

Il bit di codice è banale. Il modo migliore per fare il processo è mettere qualcosa tra il venditore e l'utente.

La mia preferenza con queste cose è di indurre il venditore a trasferire il file tramite FTP (che spero lo stiano già facendo, data la sua dimensione). Scrivi il tuo codice per afferrare il file, elaborarlo e metterlo dove l'utente si aspetta di trovarlo, quindi impostarlo in modo appropriato (ogni 5 minuti, ogni giorno o qualsiasi altra cosa).

Questo è un problema molto comune.

    
risposta data 05.11.2013 - 16:40
fonte
1

Se ho capito bene, il problema è che tu o l'utente in questione siete in gran parte abili in JavaScript e vorreste utilizzarlo. Se trascini un file nella finestra del browser, il DOM e il successivo passaggio di rendering avranno un grande sovraccarico, nel tuo caso addirittura porteranno alla chiusura prematura delle applicazioni a causa di un'eccezione di memoria insufficiente.

Puoi utilizzare JavaScript autonomo. Quindi potresti usare entrambi

Dovresti essere in grado di aprire facilmente file di dimensioni GB in un oggetto FileReader , con l'avvertenza che il seguente approccio non è il migliore. Quindi in un ciclo leggete blocchi di 5MB in memoria, elaborateli e trasferiteli su un server web (idealmente su localhost / 127.0.0.1) Potete usare un semplice script php per questo (denominatelo index.php ). Qualcosa come:

<?php file_put_contents("outfile".date().".tsv", implode('', $_POST); , FILE_APPEND); ?>

Note :

  • Probabilmente dovresti prima filtrare la variabile $_POST e inserire un ID PHP_Session nel nome file.

  • Tramite un altro breve script php / linguistico è possibile offrire all'utente la compressione di detto file di output e consentire all'utente di scaricarlo. Lo script controlla se l'archivio esiste già e se non informa l'utente di riprovare più tardi.

  • Dovresti eseguire il POST del contenuto elaborato tramite le chiamate AJAX. Se non si desidera utilizzare una libreria completa come jQuery a tale scopo, considerare l'utilizzo di è -lib's setFile function.

Riferimento:

Per un esempio pratico del File-Reader, consulta questo progetto e cerca Riferimento MDN per ulteriori informazioni.

Buona fortuna.

    
risposta data 05.11.2013 - 19:09
fonte