找回密码
 立即注册

QQ登录

只需一步,快速开始

楼主: miller162

[已解决] 工程图中,如何按顺序提取文件名

[复制链接]

7

主题

52

回帖

0

威望

助工

积分
74
 楼主| 发表于 2025-1-16 22:32 | 显示全部楼层
搞是搞好了,有点累赘的感觉,反正能用了

/*以下用于在文件名中提取信息
file_name=rel_model_name /*文件名称
strlen=STRING_LENGTH(file_name)/*计算文件名的总字符数量


p_s0=SEARCH(file_name,"-")/*查找"-字符"的位置
tem_name0=EXTRACT(file_name,p_s0+1,strlen-p_s0)/*临时截取文件名

strlen2=STRING_LENGTH(tem_name0)/*计算文件名的总字符数量
p_s1=SEARCH(tem_name0,"-")/*查找"-字符"的位置

tem_name=EXTRACT(tem_name0,p_s1+1,strlen2-p_s1)/*临时截取文件名
p_s2=SEARCH(tem_name,"-")/*查找第二个"-字符"在临时名称中的位置
p_s3=p_s1+p_s2/*计算第二个"-字符"在的位置

PN0=EXTRACT(file_name,1,p_s0-1)/*提取第一个"-字符"之前的文本
PN1=EXTRACT(tem_name0,1,p_s1-1)/*提取第一个"-字符"之前的文本
PN2=EXTRACT(tem_name0,p_s1+1,p_s3-p_s2-1)/*提两个"-字符"之间的文本
PN3=EXTRACT(tem_name0,p_s3+1,strlen2-p_s3)/*提取第二个"-字符"之后的文本

Cpartno=PN0+"."+PN1+"."+PN2+"."+PN3
回复

使用道具 举报

7

主题

52

回帖

0

威望

助工

积分
74
 楼主| 发表于 2025-2-6 11:44 | 显示全部楼层
deepseek给我的方案:没有验证,先借网络记录,空了来验证下。

方案解释:
提取文件名:

file_name = rel_model_name:获取文件名。

strlen = STRING_LENGTH(file_name):计算文件名的总字符数。

查找第一个“-”字符的位置:

p_s1 = SEARCH(file_name, "-"):查找第一个“-”字符的位置。

临时截取文件名:

tem_name = EXTRACT(file_name, p_s1 + 1, strlen - p_s1):从第一个“-”字符之后的位置开始截取文件名。

查找第二个“-”字符的位置:

p_s2 = SEARCH(tem_name, "-"):在临时文件名中查找第二个“-”字符的位置。

p_s3 = p_s1 + p_s2:计算第二个“-”字符在原始文件名中的位置。

提取各部分信息:

PN1 = EXTRACT(file_name, 1, p_s1 - 1):提取第一个“-”字符之前的文本。

PN2 = EXTRACT(file_name, p_s1 + 1, p_s3 - p_s2 - 1):提取两个“-”字符之间的文本。

PN3 = EXTRACT(file_name, p_s3 + 1, strlen - p_s3):提取第二个“-”字符之后的文本。

格式化输出:

Cpartno = PN1 + "." + PN2 + "." + PN3:将提取的部分组合成所需的格式。

优化建议:
错误处理:

在提取和查找操作中,可以添加错误处理机制,以防止文件名格式不符合预期时程序崩溃。

代码简洁性:

可以将一些重复的操作封装成函数,以提高代码的可读性和可维护性。

通用性:

如果文件名格式可能会有所变化,可以考虑使用正则表达式来提取信息,这样可以更灵活地处理不同的文件名格式。

示例代码(伪代码):
plaintext
复制
FUNCTION ExtractPartNumber(file_name)
    strlen = STRING_LENGTH(file_name)
    p_s1 = SEARCH(file_name, "-")
    IF p_s1 == -1 THEN
        RETURN "Invalid file name format"
    END IF

    tem_name = EXTRACT(file_name, p_s1 + 1, strlen - p_s1)
    p_s2 = SEARCH(tem_name, "-")
    IF p_s2 == -1 THEN
        RETURN "Invalid file name format"
    END IF

    p_s3 = p_s1 + p_s2

    PN1 = EXTRACT(file_name, 1, p_s1 - 1)
    PN2 = EXTRACT(file_name, p_s1 + 1, p_s3 - p_s2 - 1)
    PN3 = EXTRACT(file_name, p_s3 + 1, strlen - p_s3)

    RETURN PN1 + "." + PN2 + "." + PN3
END FUNCTION

file_name = "2-3-N14567890"
Cpartno = ExtractPartNumber(file_name)
PRINT Cpartno
输出:
复制
2.3.N14567890
这个方案可以有效地从文件名中提取信息并格式化为所需的工程图格式。如果有其他特殊需求或文件名格式变化,可以进一步调整和优化代码。

请依据上面的方案,处理:001-002-003-1234567890
服务器繁忙,请稍后再试。

请依据上面的方案,处理:001-002-003-1234567890
服务器繁忙,请稍后再试。

上面的方案是处理2个“-”号,请列出处理3个“-”好的方案,比如处理:A01-002-G003-12345678
处理包含3个“-”号的文件名(如 A01-002-G003-12345678)时,我们需要提取更多的部分并将其格式化为所需的工程图格式。以下是处理3个“-”号的方案:

方案目标:
将文件名 A01-002-G003-12345678 转换为工程图格式:A01.002.G003.12345678。

方案步骤:
提取文件名:

获取文件名并计算其总长度。

查找每个“-”字符的位置:

找到每个“-”字符的位置,用于分割文件名。

提取各部分信息:

根据“-”字符的位置,提取文件名中的各个部分。

格式化输出:

将提取的部分用“.”连接,生成最终的工程图格式。

伪代码实现:
plaintext
复制
FUNCTION ExtractPartNumber(file_name)
    strlen = STRING_LENGTH(file_name)  // 计算文件名总长度

    // 查找第一个“-”字符的位置
    p_s1 = SEARCH(file_name, "-")
    IF p_s1 == -1 THEN
        RETURN "Invalid file name format: Missing first '-'"
    END IF

    // 查找第二个“-”字符的位置
    tem_name1 = EXTRACT(file_name, p_s1 + 1, strlen - p_s1)
    p_s2 = SEARCH(tem_name1, "-")
    IF p_s2 == -1 THEN
        RETURN "Invalid file name format: Missing second '-'"
    END IF
    p_s2 = p_s1 + p_s2  // 计算第二个“-”在原始文件名中的位置

    // 查找第三个“-”字符的位置
    tem_name2 = EXTRACT(file_name, p_s2 + 1, strlen - p_s2)
    p_s3 = SEARCH(tem_name2, "-")
    IF p_s3 == -1 THEN
        RETURN "Invalid file name format: Missing third '-'"
    END IF
    p_s3 = p_s2 + p_s3  // 计算第三个“-”在原始文件名中的位置

    // 提取各部分信息
    PN1 = EXTRACT(file_name, 1, p_s1 - 1)  // 提取第一个“-”之前的部分
    PN2 = EXTRACT(file_name, p_s1 + 1, p_s2 - p_s1 - 1)  // 提取第一个和第二个“-”之间的部分
    PN3 = EXTRACT(file_name, p_s2 + 1, p_s3 - p_s2 - 1)  // 提取第二个和第三个“-”之间的部分
    PN4 = EXTRACT(file_name, p_s3 + 1, strlen - p_s3)  // 提取第三个“-”之后的部分

    // 格式化输出
    RETURN PN1 + "." + PN2 + "." + PN3 + "." + PN4
END FUNCTION

// 示例调用
file_name = "A01-002-G003-12345678"
Cpartno = ExtractPartNumber(file_name)
PRINT Cpartno
输出结果:
复制
A01.002.G003.12345678
方案说明:
查找每个“-”字符的位置:

使用 SEARCH 函数依次查找每个“-”字符的位置。

每次查找后,更新临时字符串和位置偏移量。

提取各部分信息:

根据“-”字符的位置,使用 EXTRACT 函数提取文件名中的各个部分。

格式化输出:

将提取的部分用“.”连接,生成最终的工程图格式。

优化建议:
错误处理:

如果文件名中“-”字符的数量不足或格式不正确,可以返回错误信息。

通用性:

如果文件名中“-”字符的数量可能变化,可以使用循环动态处理。

正则表达式:

如果支持正则表达式,可以用更简洁的方式提取信息。例如:

plaintext
复制
MATCH(file_name, "([^-]+)-([^-]+)-([^-]+)-(.+)")
正则表达式方案(如果支持):
plaintext
复制
FUNCTION ExtractPartNumber(file_name)
    pattern = "([^-]+)-([^-]+)-([^-]+)-(.+)"  // 正则表达式匹配规则
    matches = MATCH(file_name, pattern)  // 匹配文件名
    IF matches IS EMPTY THEN
        RETURN "Invalid file name format"
    END IF

    // 提取匹配的部分
    PN1 = matches[1]
    PN2 = matches[2]
    PN3 = matches[3]
    PN4 = matches[4]

    // 格式化输出
    RETURN PN1 + "." + PN2 + "." + PN3 + "." + PN4
END FUNCTION

// 示例调用
file_name = "A01-002-G003-12345678"
Cpartno = ExtractPartNumber(file_name)
PRINT Cpartno
输出结果:
复制
A01.002.G003.12345678
以上方案可以灵活处理包含3个“-”号的文件名,并生成所需的工程图格式。如果有更多“-”号或格式变化,可以进一步扩展逻辑。
回复

使用道具 举报

6

主题

174

回帖

1

威望

工程师

积分
224
发表于 2025-4-22 20:33 | 显示全部楼层
flyfishrxh 发表于 2024-2-27 08:46
/*以下用于在文件名中提取信息
file_name=rel_model_name /*文件名称
strlen=STRING_LENGTH(file_name)/*计 ...

大佬 我想提取最后一个-的位置怎么操作
学无止境
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

本站为非营利性站点,部分资源为网友搜集或发布,仅供学习和研究使用,如用于商业用途,请购买正版。站内所发布的资源,如有侵犯你的权益,请发邮件联系我们,本站将立即改正或删除。

手机版|小黑屋|野火论坛(©2007~2025) ( 苏ICP备11036728号-2 )苏公网安备 32039102000103号|站长QQ28016688

GMT+8, 2025-4-23 03:31 , Processed in 0.120032 second(s), 20 queries .

快速回复 返回顶部 返回列表