Salut!
Je travaille sur de gros fichiers qui consomment beaucoup de mémoire d'ordinateur lorsque j'ouvre même un seul fichier ... ce qui provoque la paralysie de mon PC et parfois son blocage. Je me demandais s’il existait une solution jsl permettant de découper un fichier unique en fichiers plus petits avant de l’ouvrir ... Comme File_A = 2 Go, ce fichier sera divisé en 4 fichiers plus petits de 250 Mo chacun. Je vais ensuite automatiser l'ouverture et l'agrégation / l'informatique de chaque fichier fragmenté, fermer le fichier fragmenté ouvert, puis concaténer les résultats dans le fichier fragmenté suivant qui sera traité ... puis la boucle continue.
Merci d'avance.
Si vous ne souhaitez pas charger la table en mémoire avant de la séparer, vous pouvez faire preuve de créativité dans la manière de charger les données. Pour les fichiers plats, spécifiez la position de départ et le nombre de lignes à lire dans une boucle:
dtProbe = Open("$SAMPLE_DATA/Probe.jmp");
dtProbe << save( "$temp/deleteme123.txt" );
for( i = 1, i <= 2, i++,
dt = Open(
"$temp/deleteme123.txt",
columns(
New Column( "security to create", Character, "Nominal" ),
New Column( "resource", Character, "Nominal" ),
New Column( "group", Character, "Nominal" ),
New Column( "(ADM V-net)", Character, "Nominal" )
),
Import Settings(
Fixed Column Widths( 19, 9, 6, 105 ),
Strip Quotes( 0 ),
Use Apostrophe as Quotation Mark( 0 ),
Use Regional Settings( 0 ),
Scan Whole File( 0 ),
Treat empty columns as numeric( 0 ),
CompressNumericColumns( 0 ),
CompressCharacterColumns( 0 ),
CompressAllowListCheck( 0 ),
Labels( 1 ),
Column Names Start( 1 ),
Data Starts( 1 + 100 * (i - 1) ),
Lines To Read( 100 ),
Year Rule( "20xx" )
)
)
); @Nalla :
J'aimerais également ajouter que ce n'est pas la seule approche permettant d'accélérer le traitement de ces données. Si vous deviez rendre la table "invisible" ou "privée", cela pourrait considérablement accélérer le processus.
dt << Show Window(0);
@Nalla :
Bonjour, cela peut certainement être fait.
Examinez la fonction "Sous-ensemble" dans l'index de script - cela vous aidera à former des sous-ensembles plus petits de votre table de données volumineuse. Voici un exemple . Vous pouvez ensuite utiliser "Concat" pour rejoindre la table.
// Lets start with the assumption that there are 1000 rows in dt table
// Also say you want to subset n rows in each iteration ;
LL = 1;
UL = 250 ;
for(i = 1 , i <= 4 , i ++,
LL = LL * i ;
UL = UL * i ;
dt << Select Rows(Index(LL,UL,1)); // Assuming "dt" is your master table
dt1 = dt << Subset("Private",Selected Rows(1),Selected Columns(0));<BR /> LL = UL;
);