<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Je souhaite générer une grande quantité de données texte à partir d'un script JMP. Je peux utiliser la concaténation de chaînes pour créer la sortie, puis l'écrire en même temps avec la commande Enregistrer le fichier texte. Cependant, cela est très inefficace et devient irréalisable à mesure que la chaîne grandit.
JMP prend-il en charge les flux de fichiers qui me permettraient de diriger la sortie de chaîne vers un tampon lors de sa création ?
Merci pour l'approche détaillée. La combinaison de l'utilisation d'une liste pour le regroupement et de l'utilisation de Save Text File with Append donne une bonne approximation d'un flux de fichiers. Avec cette approche, je dois coder manuellement la taille du bac et les opérations d'ajout périodiques, mais avec celles implémentées, les performances sont raisonnables.
Une autre stratégie pour contourner le ralentissement des chaînes très longues : créez une liste de chaînes plus courtes et utilisez ConcatItems( list ) pour les joindre en une seule chaîne.Spécifiez le séparateur dont vous avez besoin, qui peut être "" si vous n'avez pas besoin d'ajouter un séparateur entre les éléments. Avant JMP 13, vous devrez peut-être également créer la liste avec soin si elle contient des milliers d'éléments... voir Liste rapide. Cet exemple montre l'approche build-it-in-reverse.
liste = {} ;
insérer dans(liste, "ligne1", 1);
insérer dans(liste, "ligne2", 1);
insérer dans(liste, "line3", 1);
liste = inverse (liste);
ConcatItems(liste, "\!n");
"ligne 1
ligne 2
ligne3"
Si vous avez le choix, conservez les chaînes dans le voisinage de 10 000 à 100 000 caractères.Trop court et vous rencontrerez (peut-être) des problèmes avec un grand nombre d'éléments de liste, chacun avec sa propre surcharge.Trop long et vous aurez toujours le problème de concaténation lente (qui est un problème N ^ 2, donc gérer la longueur des chaînes de cette façon vraiment aide).
Mais pour autant, les chaînes JSL sont limitées à 2^31 (2 Go) caractères.Je pense que l'idée d'ajout de Jim fonctionnera pour plus de 2 Go.Vous souhaiterez toujours ajouter des blocs raisonnablement volumineux au fichier, car chaque sauvegarde + ajout a une ouverture/écriture/fermeture supplémentaire.Cet exemple écrit 500 000 000 de blocs de caractères jusqu'à ce que le disque soit rempli.
txt = Répéter( "a", 5e8 );
Enregistrer le fichier texte( "$temp\deleteme.txt", txt, Mode( "replace" ) );
Show( Taille du fichier( "$temp\deleteme.txt" ) );
Pour( je = 1, je <= 20, je++,
Enregistrer le fichier texte( "$temp\deleteme.txt", txt, Mode( "append" ) );
Show( Taille du fichier( "$temp\deleteme.txt" ) );
);
Taille du fichier("$temp\deleteme.txt") = 5 000 000 000 ;
Taille du fichier("$temp\deleteme.txt") = 1000000000 ;
Taille du fichier("$temp\deleteme.txt") = 15 000 00000 ;
Taille du fichier("$temp\deleteme.txt") = 2000000000 ;
Taille du fichier("$temp\deleteme.txt") = 25 000 00000 ;
Taille du fichier("$temp\deleteme.txt") = 30 000 00000 ;
Taille du fichier("$temp\deleteme.txt") = 35 000 00000 ;
Taille du fichier("$temp\deleteme.txt") = 4000000000 ;
Taille du fichier("$temp\deleteme.txt") = 45 000 00000 ;
Taille du fichier("$temp\deleteme.txt") = 5000000000 ;
Taille du fichier("$temp\deleteme.txt") = 55 000 00000 ;
Impossible d'écrire.
Il n'y a pas assez d'espace sur le disque.

Ma suggestion serait d'utiliser le qualificatif "Ajouter" sur le fichier texte de sauvegarde.

Cela vous permettra de remplir le fichier de sortie de manière continue