obtenir la taille du fichier<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />J'utilise JMP 10.0.0 avec Windows 7 et j'aimerais utiliser JSL pour déterminer la taille d'un fichier en octets en fonction d'un chemin de fichier. Voici un exemple de structure de ce que j'essaie de réaliser, où dans JMP 10.0.0 'file size()' n'est pas une option.
f_path=choisir le fichier();
f_size=taille du fichier (f_path);
Existe-t-il une méthode pour déterminer la taille du fichier sans ouvrir ni charger le fichier ?
Re : récupérer la taille du fichierMerci pour toutes les réponses. Déclarer une fonction à l'aide de la dll kernel32 fonctionne mieux pour mon application.
Re : récupérer la taille du fichierJoli avec la fonction R, MS !
Pour Windows, voici la méthode difficile.
// taille du fichier.jsl
fname = "c:/temp/bubble.jpg";
//******************************************
// avec JMP version 11
rc = if(l'hôte est (Windows) & JMP Version()=="11.0.0",
fs = Taille du fichier (nomf);
);
//******************************************
// avec R fichier.info {base}
// http://stat.ethz.ch/R-manual/R-devel/library/base/html/file.info.html
// renvoie une trame de données avec diverses informations sur le fichier, est-ce un répertoire ?, des heures, des identifiants, etc. ;
RInit();
R Envoyer(fname);
R soumettre("\[
df = fichier.info(fname);
]\");
fs = R get(df$size);
afficher(fs); // en Ko ;
R Terme();
//******************************************
// ou, à la dure
// http://msdn.microsoft.com/en-us/library/windows/desktop/aa364955(v=vs.85).aspx
// http://msdn.microsoft.com/en-us/library/windows/desktop/aa364957(v=vs.85).aspx
kernel32 = Charger la DLL( "kernel32" );
// utilise createfile pour récupérer une référence à un fichier, c'est à dire un handle de fichier
kernel32 << DeclareFunction( "CreateFileA", Convention( STDCALL ), Alias( "CreateFile" ),
Arg( AnsiString( 256 ), "lpFileName" ),
Arg( Int32, "dwDesiredAccess" ),
Arg( Int32, "dwShareMode" ),
Arg( IntPtr, "lpSecurityAttributes" ),
Arg( Int32, "dwCreationDisposition" ),
Arg( Int32, "dwFlagsAndAttributes" ),
Arg(UIntPtr, "hTemplateFile" ),
Retours( Int32 )
);
ouvert_existant = 3 ;
hFile = kernel32 << CreateFile( fname, 0, 0, 0, open_existing, 0, 0);
// GetFileSize nécessite un handle de fichier (ci-dessus)
kernel32 << DeclareFunction( "GetFileSizeEx", Convention( STDCALL ), Alias( "GetFileSizeEx" ),
Arg( Int32, "hFichier" ),
Arg( Int32, "lpFileSize", mise à jour),
Retours( Int32 )
);
fs = 0 ;
rc = kernel32 << GetFileSizeEx( hFile, fs );
afficher(fs);
// nettoyer
// http://msdn.microsoft.com/en-us/library/windows/desktop/ms724211(v=vs.85).aspx
kernel32 << DeclareFunction( "CloseHandle", Convention( STDCALL ), Alias( "CloseHandle" ),
Arg( Int32, "hFichier" ),
Retours( Int32 )
);
rc = kernel32 << CloseHandle( hFile );
kernel32 << Décharger la DLL();
Cordialement,-Matt
Re : récupérer la taille du fichierSi R est installé, cela devrait fonctionner (testé uniquement dans JMP 10 pour Mac) :
R Initialisation () ;
mon chemin = Choisir un fichier () ;
R Exécuter ( { mon chemin } , { X } , "x <- file.info(monchemin)$size" ) ;
Montrer ( X ) ;
Terme R () ;
Re : récupérer la taille du fichierLa fonction File Size() est disponible dans JMP 11.
Vous trouverez ci-dessous une modification d'une partie du script "2_Extra_MSDirUsingWeb.jsl" du chapitre 2 du livre "JSL Companion Applications of the JMP Scripting Language".Il s'agit d'une solution compliquée qui ne fonctionne que pour Windows.Notez que le script est un peu verbeux et comporte des commandes supplémentaires pour démontrer les fonctions et les résultats.Le script complet décrit la syntaxe de la commande MS DOS dir.
=================================================== =================================================== ======
// cmd_dir est la commande permettant d'obtenir une liste d'exemples de données JMP
// c:\temp\jmpDir.bat est le fichier de commandes à exécuter
// c:\temp\dirOut.txt est le fichier des résultats de la commande dir
batFid = "c:\temp\jmpDir.bat" ;
Répsortie = "c:\temp\dirOut.txt" ;
// Récupère le chemin complet d'un fichier
f_path0 = choisir un fichier () ;
f_chemin = Convertir le chemin du fichier ( f_chemin , les fenêtres ) ;
// Construire la commande DOS "dir"
cmd_txt = "\[rép /-C /T:C /S "]\"
|| f_chemin
|| "\[" > ]\"
|| Répsortie ;
montrer ( cmd_txt ) ;
// Enregistrer dans un fichier avec une extension .bat.Windows interprète les fichiers .bat
// identique à la fenêtre Exécuter (exécuter la commande) sur le bouton Démarrer
Enregistrer le fichier texte ( batFid , cmd_txt ) ;
// Windows interprète ce chemin de fichier "ouvrir" comme "exécuter"
t0 = Aujourd'hui () ;
la toile ( batFid ) ;
Attendez ( 1 ) ;
// Attendez une seconde que Windows se termine, peut-être plus s'il s'agit d'un énorme répertoire.
// Notez que l'attente est le seul contrôle dont vous disposez, puis regardez si le fichier existe.
// Montrer les résultats
// Quelques "vérifications" que vous pouvez utiliser ici si elles n'existent pas ou si elles sont plus anciennes que prévu
Si ( ! Le fichier existe ( Répsortie ) | ( Date de création ( Répsortie ) - t0 > dix ) ,
Légende ( "Il y a eu un problème avec la commande dir, elle n'a pas fonctionné. Abandonner...") ;
Attendez ( 4 ) ;
Légende ( Retirer ) ;
Lancer () ;
) ;
_crlf = "\!N" ;
dir_results = mots ( Charger un fichier texte ( Répsortie ) , _crlf ) ;
dir_size_str = mots ( dir_results [ articles ( dir_results ) - 1 ]) ;
f_size = num ( dir_size_str [ 3 ]) ;
montrer ( dir_size_str , f_size ) ; //nombre d'octets
//================================================= =============================
//la commande ci-dessous crée un fichier qui affiche les résultats de la commande DOS dir utilisée
// Ouvre le fichier de résultats
dir_dt = Ouvrir (
Répsortie ,
Colonnes ( Nom ( "Dir résultats" ) = Personnage ) ,
Importer les configurations (
Fin de ligne ( CRLF ) ,
Fin du champ ( CRLF ) , // garantit seulement 1 colonne
Citations de bande ( 1 ) ,
Utiliser l'apostrophe comme guillemet ( 1 ) ,
Numériser le fichier entier ( 1 ) ,
Traiter les colonnes vides comme numériques ( 0 ) ,
Étiquettes ( 0 ) ,
Les données démarrent ( 1 ) ,
Lignes à lire ( Tous ) ,
Règle de l'année ( "10-90" )
)
) ;