Multi Commander > Script
Script to rearrange files based on weeknumber into folders with weeknumber
Jungle:
Here comes The Magic! :) Below is the script function calculating week number in accordance with ISO 8601. The code was taken here and converted to MultiScript. MC v7.x is required.
I haven't done much testing, but results for all days in 2001-2010 are the same as in Excel.
--- Code: ---function IsLeapYear( $year )
{
return IsAnyTrue( IsAllTrue( mod( $year, 4 ) == 0, !( mod( $year, 100 ) == 0 ) ), mod( $year, 400 ) == 0 );
}
function WeekNumIso8601( $day, $month, $year )
{
@var $YY, $C, $G, $I, $J, $DayOfYearNumber, $Jan1Weekday, $Weekday, $YearNumber;
@var $LeapYear = 0, $precLeapYear = 0, $WeekNumber = 0;
@var $Mnth = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 };
// 1. Find if Y is LeapYear
if ( IsLeapYear( $year ) )
{
$LeapYear = 1;
}
// 2. Find if Y-1 is LeapYear
if ( IsLeapYear( $year - 1 ) )
{
$precLeapYear = 1;
}
//3. Find the DayOfYearNumber for Y M D
$DayOfYearNumber = ( $day ) + ( $Mnth[ $month - 1 ] );
if ( IsAllTrue( $LeapYear > 0 , $month > 2 ) )
{
$DayOfYearNumber++;
}
// 4. Find the Jan1Weekday for Y (Monday=1, Sunday=7)
$YY = mod( $year - 1, 100 );
$C = ( $year - 1 ) - $YY;
$G = $YY + ( $YY / 4 );
$I = mod( $C / 100, 4 );
$Jan1Weekday = 1 + mod( ( $I * 5 ) + $G, 7 );
// 5. Find the Weekday for Y M D
$I = $DayOfYearNumber + ( $Jan1Weekday - 1 );
$Weekday = 1 + mod( $I - 1, 7 );
if ( $Weekday == 0 )
{
$Weekday = 7;
}
// 6. Find if Y M D falls in YearNumber Y-1, WeekNumber 52 or 53
if ( IsAllTrue( $DayOfYearNumber <= ( 8 - $Jan1Weekday ), $Jan1Weekday > 4 ) )
{
$YearNumber = $year - 1;
if ( IsAnyTrue( $Jan1Weekday == 5, IsAllTrue( $Jan1Weekday == 6, $precLeapYear == 1 ) ) )
{
$WeekNumber = 53;
}
else
{
$WeekNumber = 52;
}
}
else
{
$YearNumber = $year;
}
// 7. Find if Y M D falls in YearNumber Y+1, WeekNumber 1
if ( $YearNumber == $year )
{
if ( $LeapYear == 1 )
{
$I = 366;
}
else
{
$I = 365;
}
if ( ( $I - $DayOfYearNumber ) < ( 4 - $Weekday ) )
{
$YearNumber = $year + 1;
$WeekNumber = 1;
}
}
// 8. Find if Y M D falls in YearNumber Y, WeekNumber 1 through 53
if ( $YearNumber == $year )
{
$J = $DayOfYearNumber + ( 7 - $Weekday ) + ( $Jan1Weekday - 1 );
$WeekNumber = $J / 7;
if ( $Jan1Weekday > 4 )
{
$WeekNumber--;
}
}
return $WeekNumber;
}
--- End code ---
Mathias (Author):
--- Quote from: Jungle on April 10, 2017, 18:42:34 ---Here comes The Magic! :) Below is the script function calculating week number in accordance with ISO 8601. The code was taken here and converted to MultiScript. MC v7.x is required.
I haven't done much testing, but results for all days in 2001-2010 are the same as in Excel.
--- End quote ---
Wow I'm impressed, You really use the script engine more than I every indented it for.
Not sure I would have the patience to write all that. very cool
Herrie:
Although the function looks K, I still wonder how to embed it in a script that:
runs through all files in a folder, moives them to a new folder, created beforehand
e.g.
:mainFolder\ file_x.txt date= 10-10-2017
should land in folder w41 (being the weeknumber)
OR
run through the filelist in a folder and ADD the weeknumber attribute (?) to the file
Navigation
[0] Message Index
[*] Previous page
Go to full version