出现错误,我无法运行它,有人可以帮忙吗?
// 将日期重新格式化为 dd/mm/yyyy 的函数
colName = Column Dialog( "选择日期列" );
reformatDateColumn = 函数({dt,colName},
dt = 当前数据表();如果(列(dt,colName)==Empty(),
Throw( "所选列在当前数据表中不存在。" );
(英文):
// 识别并重新格式化日期的函数
formatDate = 函数({date},
// 检查不同的日期格式并转换为 dd/mm/yyyy
如果(包含(日期,“/”),
// 检查日期是否为 dd/mm/yyyy 或 mm/dd/yyyy 格式
如果( Substr( 日期, 3, 1 ) == “/”,
// 假设 dd/mm/yyyy 格式
日期,
// 假设 mm/dd/yyyy 格式并转换为 dd/mm/yyyy
Concat( Word( 2, 日期, "/" ), "/", Word( 1, 日期, "/" ), "/", Word( 3, 日期, "/" ) )
),
// 处理 mmddyyyy、ddmmyyyy、yyyymmdd 或 yyyyddmm 格式
如果(长度(日期)==8,
// 检查前两位数字是否构成有效的月份或日期
如果(Num(Substr(日期,1,2))> 12,
// 假设 ddmmyyyy 格式
Concat( Substr( 日期, 1, 2 ), "/", Substr( 日期, 3, 2 ), "/", Substr( 日期, 5, 4 ) ),
// 假设 mmddyyyy 格式并转换为 dd/mm/yyyy
Concat( Substr( 日期, 3, 2 ), "/", Substr( 日期, 1, 2 ), "/", Substr( 日期, 5, 4 ) )
),
如果(长度(日期)==8,
If( Num( Substr( date, 1, 4 ) ) > 999, // 检查前 4 位数字是否构成有效年份
// 检查接下来的两位数字是否构成有效的月份或日期
If( Num( Substr( 日期, 5, 2 ) ) > 12,
// 假设 yyyyddmm 格式
Concat( Substr( 日期, 7, 2 ), "/", Substr( 日期, 5, 2 ), "/", Substr( 日期, 1, 4 ) ),
// 假设 yyyymmdd 格式并转换为 dd/mm/yyyy
Concat( Substr( 日期, 7, 2 ), "/", Substr( 日期, 5, 2 ), "/", Substr( 日期, 1, 4 ) )
),
// 如果不是有效的年份或格式,则返回原始日期
日期
),
// 如果日期长度不是 8,则返回原始日期(格式无效)
日期
)
)
)
(英文):
//创建带有按钮的 UI 来触发功能
新窗口(“数据处理工具”,
V 列表框(
// 重新格式化日期列的按钮
按钮框(“重新格式化日期列”,
// 打开一个对话框来选择日期列
colName = Column Dialog( "选择日期列" );
// 调用函数重新格式化选定的日期列
reformatDateColumn( 当前数据表 (), colName );
)
)
(英文):
您能否解释一下您想要做什么而不是仅仅解释代码(代码看起来像是 LLM 创建的)?
我假设您有一个数据表,其中有一个看起来像日期的字符列。它可以有混合格式的日期?您希望有 UI 将它们转换为数字格式?JMP 的格式模式可能能够做到这一点,但有一个数据示例会很有帮助。
这是原始脚本,格式稍微容易阅读一些(希望我没有对脚本格式进行任何更改)
查看更多...
colName = Column Dialog("Select Date Column");
reformatDateColumn = Function({dt, colName},
dt = Current Data Table();
If(Column(dt, colName) == Empty(),
Throw("The selected column does not exist in the current data table.")
);
);
formatDate = Function({date},
If(Contains(date, "/"),
If(Substr(date, 3, 1) == "/",
date,
// Assume mm/dd/yyyy format and convert to dd/mm/yyyy
Concat(Word(2, date, "/"), "/", Word(1, date, "/"), "/", Word(3, date, "/"))
)
,
// Handle mmddyyyy, ddmmyyyy, yyyymmdd, or yyyyddmm format
If(Length(date) == 8,
// Check if first two digits form a valid month or day
If(Num(Substr(date, 1, 2)) > 12,
// Assume ddmmyyyy format
Concat(Substr(date, 1, 2), "/", Substr(date, 3, 2), "/", Substr(date, 5, 4))
,
// Assume mmddyyyy format and convert to dd/mm/yyyy
Concat(Substr(date, 3, 2), "/", Substr(date, 1, 2), "/", Substr(date, 5, 4))
)
,
If(Length(date) == 8,
// Check if first 4 digits form a valid year
If(Num(Substr(date, 1, 4)) > 999,
// Check if the next two digits form a valid month or day
If(Num(Substr(date, 5, 2)) > 12,
// Assume yyyyddmm format
Concat(Substr(date, 7, 2), "/", Substr(date, 5, 2), "/", Substr(date, 1, 4))
,
// Assume yyyymmdd format and convert to dd/mm/yyyy
Concat(Substr(date, 7, 2), "/", Substr(date, 5, 2), "/", Substr(date, 1, 4))
)
,
// If not a valid year or format, return the original date
date
)
,
// If the date length is not 8, return the original date (invalid format)
date
)
)
)
);
New Window("Data Processing Tools",
V List Box(
Button Box("Reformat Date Column",
// Open a dialog to select the date column
colName = Column Dialog("Select Date Column");
reformatDateColumn(Current Data Table(), colName);
)
)
);