注册 登录
编程论坛 VFP论坛

vfp的困惑之四 CDOW(a)编译前后的输出值不同?

wzxc 发布于 6 天前 07:43, 92 次点击
a=CTOD("2025/7/25")
b= CDOW(a)
在交互方式下运行,b的值是"Friday"。连编成可执行程序后运行,b的值却是"星期五",为何?
另外,Isalpha("Friday")和Isalpha("星期五")均返回.T.,"星期五"也被当作字母处理了?
询问百度ai,回答:

在Visual FoxPro 9.0中,CDOW()函数返回星期名称的差异是由于交互环境和编译环境的区域设置不同导致的‌1。交互模式下默认使用英文输出,而编译后的程序会遵循系统区域设置返回本地化语言(如中文)。可以通过SET LANGUAGE TO命令强制指定语言环境来统一输出格式。

关于Isalpha()函数的处理逻辑:该函数会检测字符串是否仅包含字母字符,而中文字符在VFP中被归类为"广义字母"范畴,因此"星期五"也会返回.T.。这是VFP对多语言字符集的特殊处理方式‌
再问:
确定vfp有SET LANGUAGE TO语句?
回答:
Visual FoxPro确实支持SET LANGUAGE TO语句,该命令用于设置应用程序的语言环境,会影响日期格式、星期名称等本地化输出‌。例如执行SET LANGUAGE TO ENGLISH后,CDOW()函数将返回英文星期名称(如"Friday"),而SET LANGUAGE TO CHINESE则返回中文(如"星期五")。

该命令的语法为:SET LANGUAGE TO [cLanguageName],其中cLanguageName参数支持的语言选项取决于系统安装的语言资源文件‌1。典型参数包括"ENGLISH"、"CHINESE"、"GERMAN"等。


翻遍了帮助文档也没有SET LANGUAGE TO啊!哎.........
2 回复
#2
cssnet6 天前 15:38
若实在无解,那就照 DeepSeek 建议,写一个简单函数转换一下子呗。远远好过挠破头也搜不到VFP的相关参数或语句:

* 中英文星期对照表
FUNCTION MapToEnglish(tcChineseDay)
    LOCAL lcEnglish
    DO CASE
        CASE tcChineseDay = "星期日" OR tcChineseDay = "星期天"
            lcEnglish = "Sunday"
        CASE tcChineseDay = "星期一"
            lcEnglish = "Monday"
        CASE tcChineseDay = "星期二"
            lcEnglish = "Tuesday"
        CASE tcChineseDay = "星期三"
            lcEnglish = "Wednesday"
        CASE tcChineseDay = "星期四"
            lcEnglish = "Thursday"
        CASE tcChineseDay = "星期五"
            lcEnglish = "Friday"
        CASE tcChineseDay = "星期六"
            lcEnglish = "Saturday"
        OTHERWISE
            lcEnglish = tcChineseDay  && 默认原值
    ENDCASE
    RETURN lcEnglish
ENDFUNC

* 调用示例
? MapToEnglish(CDOW(DATE()))  && 先获取本地化结果再转换
#3
easyppt6 天前 15:47
觉得CDOW() 诡异的话,就用 dow() 变通实现

Isalpha() 什么场景需要判断字母,相对比,大多都是判断是否为数字

很多时候不行,就换种思路求解,死角绕进去很痛苦,也没必要,目的是解决问题

1