Bonjour à tous,
J'ai un programme qui exportera des fichiers .txt plats similaires à celui joint. Je voudrais écrire un script qui prendra la première colonne, créer de nouvelles et remplir ces valeurs. Je n'ai pas réussi à mettre en œuvre un JSL que j'ai trouvé sur le site.
En utilisant uniquement le script JSL, je voudrais séparer la "Colonne 1" dans "Exemple avant" en trois nouvelles colonnes, étiqueter les occurrences de cette colonne et les renseigner jusqu'à la prochaine valeur valide. Comme vu dans "Exemple après".
Exemple avant

Exemple après:

Question: la structure imbriquée de votre texte rappelle XML. Est-ce le texte original ou une version après quelques modifications, comme la suppression de balises?
C’est juste quelque chose que j’ai vite fait qui imite les fichiers plats avec lesquels je travaille. Nous ne connaissons pas le logiciel (HAScientific, SLIM) qui exporte le fichier .txt. Je ne suis donc pas sûr de savoir comment les données sont structurées de manière native. Je pense que c'est basé sur SQL, je n'ai tout simplement pas de clés dans ce château. Bien que cela soit frustrant, le travail que j'ai mis au point est un script JSL qui lit et nettoie les fichiers texte.
@danielrbiber , le script attaché est écrit en ayant à l’esprit la structure imbriquée XML: obtenez une valeur qui reste identique jusqu’à modification, créez une nouvelle ligne et écrivez les résultats lorsque le point temporel est modifié. Notez que cela peut ne pas gérer toutes les instances de vos fichiers, mais fera ce que vous voulez pour cet exemple de fichier texte.
Vous devez modifier le chemin du fichier texte à exécuter.
Names Default to Here(1);
dt0 = Open(
"C:\Users\_xx\Downloads\Example Before.txt",
Table Contains Column Headers (1),
End of Line ( CRLF, CR, LF),
End of Field (comma, CSV(0)),
Column Names Start(1));
//create a new table
dt = New Table("Restruct",
New Column( "Column 1", Character),
New Column( "Meta Data", Character),
New Column( "Data", Numeric),
New Column( "Project", Character),
New Column( "Time Point", Character),
New Column( "Condition", Character) );
//Initialize values
md="";
dv=empty();
tp="";
pj="";
cd="";
crow = 0;
//new rows will be created for new time point
//this might not cover all files, but matches your sample text data.
for(i=1,i<=nrow(dt0),i++,
cval = dt0:Column 1[i];
If(cval =="", Continue());
if(starts with(cval,"PT"), pj=cval);
if(contains(cval,"/"), cd = cval);
if(contains(cval,"Initial") | contains(cval,"month"),
tp = cval;
if(trim(cval)=="Initial", cd = cval);
md = dt0:Meta Data[i];
dv = dt0:Data[i];
dt << add rows(1, At End);
crow++;
dt:Column 1[crow] = cval;
dt:Meta Data[crow] = md;
dt:Data[crow] = dv;
dt:Time Point[crow] = tp;
dt:Project[crow] = pj;
dt:Condition[crow] = cd;
); // end if
); // end for
C'est une manière très différente de celle que je pensais résoudre le problème. Je pense que cela devrait fonctionner avec un peu de bricolage. Merci pour l'aide.