Allega file di testoBuongiorno a tutti,
Ho una cartella che contiene 2800 file di testo. Ogni file di testo ha 3 colonne. Vorrei poter unire tutti questi file di testo in un unico file JMP (eseguendo un join per numero di riga), questo file JMP avrebbe quindi 2800*3 colonne.
Osservazioni :
Prima di unire tutti i file, i titoli devono essere aggiunti alle colonne di ogni file.
Titolo colonna 1: x-nomefile
Titolo colonna 2: y-nomefile
Colonna del titolo 3: valore del nome file
Con “nomdufichier” che corrisponde al nome del file che si sta aprendo.
Riesco a recuperare il nome della cartella e tutti i nomi dei file di testo da aprire in questa cartella con il seguente codice:
// Chemin du répertoire contenant les fichiers textes
chemin_du_repertoire = "chemin\du\dossier";
// Parcourir le répertoire et obtenir les noms des fichiers
noms_fichier = Files In Directory(chemin_du_repertoire, "\*.txt");
Ma poi non ho un punto di partenza per il resto.
Grazie per l'aiuto e le risposte!
Automazione e scriptingAccesso ai datiRe: Joindre file textesPer ottenere un buon punto di partenza: eseguire l'azione per una coppia di file in modo interattivo con JMP e quindi copiare lo script da Enhanced Log. Quindi puoi iniziare a modificare lo script creato da JMP in modo che funzioni molto più facilmente nel tuo script.
Re: Allega file di testoSono riuscito a scrivere uno script in grado di trasformare i file di testo in file JMP con i titoli di colonna corretti.
Tuttavia, eseguire l'unione in linea di tutti questi file è più difficile.
Ho provato con il seguente script:
// Chemin du dossier contenant les fichiers texte
dossier = "......";
// Obtenir la liste de tous les fichiers dans le dossier
listeFichiers = Files In Directory(dossier);
// Créer une nouvelle table pour stocker les données combinées
table = New Table("Data Table");
// Boucle pour charger et combiner les fichiers
for (i = 1, i <= N Items(listeFichiers), i++,
fichierCourant = dossier || listeFichiers[i];
dt = Open(fichierCourant);
// Ajouter les colonnes du fichier courant à la table combinée
table << Join(With(dt),By Row Number);
// Fermer le fichier courant
Close(dt, NoSave);
);Re: Joindre file textesCon join molto probabilmente crei sempre una nuova tabella, quindi dovresti gestirla anche tu. Un'altra opzione è utilizzare invece Aggiorna
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(3),
Compress File When Saved(1),
New Column("A1", Numeric, "Continuous", Format("Best", 12), Set Values([1, 2, 3]))
);
dt1 = New Table("Untitled 2",
Add Rows(3),
Compress File When Saved(1),
New Column("B1", Numeric, "Continuous", Format("Best", 12), Set Values([4, 5, 6]))
);
wait(1);
dt << Update(
With(Data Table("Untitled 2")),
Replace Columns in Main Table(None)
);
Close(dt1, no save);
(prova anche questo prima con l'opzione interattiva)
Re: Allega file di testoHo scritto lo script di seguito che funziona bene ma richiede molto tempo per essere eseguito per 2800 file.
Names Default To Here( 1 );
// Début de la mesure du temps
start=tick seconds();
// Chemin du dossier contenant les fichiers texte
dossier = "...";
// Obtenir la liste de tous les fichiers dans le dossier
listeFichiers = Files In Directory(dossier);
For ( i = 1 , i <= 2862 , i++,
Names Default To Here( 1 );
if( i == 1,
fichierCourant = dossier || listeFichiers[1];
fichierCourant1 = dossier || listeFichiers[Num(i+1)];
dt = Open(fichierCourant);
dt1 = Open(fichierCourant1);
dt << Join(
With( dt1 ),
By Row Number,
Output Table( "Sans titre.jmp" )
);
Close(dt,NoSave);
Close(dt1,NoSave);
dt = current data table();
,
dt = current data table();
fichierCourant1 = dossier || listeFichiers[Num(i+1)];
dt1 = Open(fichierCourant1);
dt << Join(
With( dt1 ),
By Row Number,
Output Table( "Sans titre.jmp" )
);
Close(dt,NoSave);
Close(dt1,NoSave);
);
);
end=tick seconds();
runtime=end-start;
durée=runtime/60;
result=(Char("La durée est de ")||Char(durée,5) || " "||Char("minutes"));
show(result);Grazie per l'aiuto !