Dateigröße ermitteln<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ich verwende JMP 10.0.0 mit Windows 7 und möchte JSL verwenden, um eine Dateigröße in Bytes anhand eines Dateipfads zu bestimmen. Hier ist eine Beispielstruktur dessen, was ich erreichen möchte, wobei in JMP 10.0.0 „Dateigröße()“ keine Option ist.
f_path=pick file();
f_size=Dateigröße(f_path);
Gibt es eine Methode, die Dateigröße zu bestimmen, ohne die Datei zu öffnen oder zu laden?
Betreff: Dateigröße ermittelnVielen Dank für alle Antworten. Das Deklarieren einer Funktion mithilfe der Kernel32-DLL funktioniert für meine Anwendung am besten.
Betreff: Dateigröße ermittelnSchönes mit R-Funktion, MS!
Für Windows ist hier der schwierige Weg.
// Dateigröße.jsl
fname = "c:/temp/bubble.jpg";
//*********************************************
// mit JMP Version 11
rc = if(host is(Windows) & JMP Version()=="11.0.0",
fs = Dateigröße(fname);
);
//*********************************************
// mit R file.info {base}
// http://stat.ethz.ch/R-manual/R-devel/library/base/html/file.info.html
// gibt einen Datenrahmen mit verschiedenen Dateiinformationen zurück, ist ein Verzeichnis?, Zeiten, IDs usw.;
R Init();
R Send(fname);
R send("\[
df = file.info(fname);
]\");
fs = R get(df$size);
show(fs); // in KB;
R Term();
//*********************************************
// oder auf die harte Tour
// 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 = DLL laden( "kernel32" );
// Verwenden Sie „createfile“, um einen Verweis auf eine Datei abzurufen, z. B. ein Dateihandle
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" ),
Gibt zurück (Int32)
);
open_existing = 3;
hFile = kernel32 << CreateFile( fname, 0, 0, 0, open_existing, 0, 0);
// GetFileSize erfordert Dateihandle (von oben)
kernel32 << DeclareFunction( "GetFileSizeEx", Convention( STDCALL ), Alias( "GetFileSizeEx" ),
Arg( Int32, "hFile" ),
Arg( Int32, „lpFileSize“, update ),
Gibt zurück (Int32)
);
fs = 0;
rc = kernel32 << GetFileSizeEx( hFile, fs );
show(fs);
// Aufräumen
// http://msdn.microsoft.com/en-us/library/windows/desktop/ms724211(v=vs.85).aspx
kernel32 << DeclareFunction( "CloseHandle", Convention( STDCALL ), Alias( "CloseHandle" ),
Arg( Int32, "hFile" ),
Gibt zurück (Int32)
);
rc = kernel32 << CloseHandle( hFile );
kernel32 << DLL(); entladen;
Mit freundlichen Grüßen,-Matt
Betreff: Dateigröße ermittelnWenn Sie R installiert haben, sollte dies funktionieren (nur in JMP 10 für Mac getestet):
R-Init () ;
mein Weg = Wählen Sie Datei () ;
R Ausführen ( { mein Weg } , { X } , „x <- file.info(meinpfad)$size“ ) ;
Zeigen ( X ) ;
R-Term () ;
Betreff: Dateigröße ermittelnDie Funktion File Size() ist in JMP 11 verfügbar.
Nachfolgend finden Sie eine Modifikation eines Teils des Skripts „2_Extra_MSDirUsingWeb.jsl“ aus Kapitel 2 des Buches „JSL Companion Applications of the JMP Scripting Language“.Es handelt sich um eine komplizierte Lösung, die nur für Windows funktioniert.Beachten Sie, dass das Skript etwas wortreich ist und zusätzliche Befehle enthält, um die Funktionen und die Ausgabe zu demonstrieren.Das vollständige Skript beschreibt die Syntax des MS-DOS-Befehls dir.
=============================================== =============================================== ======
// cmd_dir ist der Befehl zum Abrufen einer Liste der JMP-Beispieldaten
// c:\temp\jmpDir.bat ist die auszuführende Befehlsdatei
// c:\temp\dirOut.txt ist die Ergebnisdatei des dir-Befehls
batFid = „c:\temp\jmpDir.bat“ ;
outDir = „c:\temp\dirOut.txt“ ;
// Den vollständigen Pfad für eine Datei abrufen
f_path0 = Datei auswählen () ;
f_path = Dateipfad konvertieren ( f_path , Windows ) ;
// Den DOS-Befehl „dir“ erstellen
cmd_txt = "\[dir /-C /T:C /S "]\"
|| f_path
|| „\[“ > ]\“
|| outDir ;
zeigen ( cmd_txt ) ;
// In einer Datei mit der Erweiterung .bat speichern.Windows interpretiert .bat-Dateien
// das Gleiche wie das Fenster „Ausführen“ (Befehl ausführen) auf der Startschaltfläche
Textdatei speichern ( batFid , cmd_txt ) ;
// Windows interpretiert diese „geöffnete“ Pfaddatei als „ausführen“
t0 = Heute () ;
Netz ( batFid ) ;
Warten ( 1 ) ;
// Warten Sie eine Sekunde, bis Windows abgeschlossen ist, möglicherweise länger, wenn es sich um ein großes Verzeichnis handelt.
// Beachten Sie, dass das Warten die einzige Kontrolle ist, die Sie haben, und prüfen Sie dann, ob die Datei vorhanden ist.
// Zeige Ergebnisse
// Ein paar „Prüfungen“, die Sie hier anwenden können, wenn es nicht existiert oder älter als erwartet ist
Wenn ( ! Datei existiert ( outDir ) | ( Erstellungsdatum ( outDir ) - t0 > 10 ) ,
Untertitel ( „Es gab ein Problem mit dem dir-Befehl, er konnte nicht ausgeführt werden. Abbruch...") ;
Warten ( 4 ) ;
Untertitel ( Entfernen ) ;
Werfen () ;
) ;
_crlf = "\!N" ;
dir_results = Wörter ( Textdatei laden ( outDir ) , _crlf ) ;
dir_size_str = Wörter ( dir_results [ nitems ( dir_results ) - 1 ]) ;
f_size = Num ( dir_size_str [ 3 ]) ;
zeigen ( dir_size_str , f_size ) ; //Anzahl der Bytes
//============================================= =============================
//Der folgende Befehl erstellt eine Datei, die die Ergebnisse des verwendeten DOS-Befehls dir anzeigt
// Öffnen Sie die Ergebnisdatei
dir_dt = Offen (
outDir ,
Säulen ( Name ( „Dir-Ergebnisse“ ) = Charakter ) ,
Importeinstellungen (
Ende der Linie ( CRLF ) ,
Ende des Feldes ( CRLF ) , // stellt nur 1 Spalte sicher
Strip-Zitate ( 1 ) ,
Verwenden Sie Apostroph als Anführungszeichen ( 1 ) ,
Ganze Datei scannen ( 1 ) ,
Behandeln Sie leere Spalten als numerisch ( 0 ) ,
Etiketten ( 0 ) ,
Datenstarts ( 1 ) ,
Zeilen zum Lesen ( Alle ) ,
Jahresregel ( „10-90“ )
)
) ;