谢谢2楼sych.
LPARAMETERS taParam1, taParam2, taParam3, taParam4, taParam5, ;
taParam6, taParam7, taParam8, taParam9, taParam10, ;
taParam11, taParam12, taParam13, taParam14, taParam15, ;
taParam16, taParam17, taParam18, taParam19, taParam20
LOCAL aFiles, i, nCount, cPath
LOCAL sFiles, bHasChinese, nValidCount
LOCAL sDebugMsg
* 2. 智能判断参数类型并构建内部统一数组 aFiles
IF TYPE("taParam1") = "A"
nCount = ALEN(taParam1)
DIMENSION aFiles(nCount)
FOR i = 1 TO nCount
aFiles(i) = taParam1(i)
ENDFOR
ELSE
* --- 模式 B: 传入的是多个字符串 ---
nCount = PCOUNT() && 获取实际传入的参数个数
IF nCount = 0
MESSAGEBOX("未提供文件路径", 16, "错误")
RETURN .F.
ENDIF
DIMENSION aFiles(nCount)
FOR i = 1 TO nCount
* 动态获取第 i 个参数的值
* EVALUATE("taParam" + TRANSFORM(i)) 可以获取 p1, p2... 的值
cPath = EVALUATE("taParam" + TRANSFORM(i))
aFiles(i) = cPath
ENDFOR
ENDIF
* 3. 获取数组长度并初始化调试信息
nTotal = ALEN(aFiles)
sDebugMsg = "处理模式: " + IIF(TYPE("taParam1")="A", "数组模式", "多参数模式") + CHR(13)
sDebugMsg = sDebugMsg + "文件总数: " + TRANSFORM(nTotal) + CHR(13) + CHR(13)
sFiles = ""
bHasChinese = .F.
nValidCount = 0
* 4. 遍历内部数组,构建数据串
FOR i = 1 TO nTotal
cPath = ALLTRIM(aFiles[i])
* 记录调试信息
sDebugMsg = sDebugMsg + "索引[" + TRANSFORM(i) + "]: " + cPath + " -> 存在" + TRANSFORM(FILE(cPath)) + CHR(13)
IF !EMPTY(cPath) AND FILE(cPath)
sFiles = sFiles + cPath + CHR(0)
nValidCount = nValidCount + 1
* 检测是否包含中文或非ASCII字符
IF ASC(SUBSTR(cPath, 1, 1)) > 127 OR LEN(cPath) != LEN(STRCONV(cPath, 1))
bHasChinese = .T.
ENDIF
ENDIF
ENDFOR
* 显示调试信息
MESSAGEBOX(sDebugMsg + CHR(13) + "有效文件数: " + TRANSFORM(nValidCount), 64, "调试信息")
*以上是 countfiles.prg 是统计传入的文件数,
*以上有2种传入方法
方法1: DO countfiles WITH
"E:\SSS.JPG", "E:\SSS.BMP", "E:\SSS.PNG", "E:\AAA.JPG" 可以得到正确的解
方法2:
LOCAL af
DIMENSION af(4)
af(1) = "E:\SSS.JPG"
af(2) = "E:\SSS.BMP"
af(3) = "E:\SSS.PNG"
af(4) = "E:\AAA.JPG"
=countfiles(@af)
此时只有一个有效值af(1) ,其它的不见了。
就可问一下 传入的数组如何 辩识?要区分数组和只传入一个参数时的区别 例如 DO countfiles WITH
"E:\SSS.JPG"
方法2:传入数组识别 并取得值