首页 > 解决方案 > 使用带有规则的预定义结构重写文件名

问题描述

我需要一些帮助来构建我的问题然后对其进行编码。

我正在读取文件的名称,文件的名称是使用定义的结构组成的,比如说:

ID1 ## ID2 ID3 ID4

其中每个 ID 可以是列表/表中的 X 个字符串中的 1 个

ID1: string1, "string with space", string2 ...
ID2: etc.
ID3: etc.

其中##是一个数字

由此,我想使用一些预定义的规则构造一个通用名称,并检索 ID1 和 ID4 以进行进一步分类。

首先我需要检索 ID1
然后我需要根据 ID1 我需要应用一个规则来确定该号码是否应该由PMGM替换

if ID1 = FP and (## = 14 or 16 or 18)
then replace ## by PM
else if replace ## by GM

然后我需要恢复 ID4,因为我想创建一个看起来像的文件路径

./ID4/ID1/ 

文件名和创建的路径的示例是:

FP 20 PETIT CHEF BV BIS LORIS        |   
FP 22 PETIT CHEF BV JUNIOR LORIS     |  --> FP PM PETIT CHEF BV LORIS

FP 24 PETIT CHEF BV BIS LORIS        |
FP 26 PETIT CHEF BV JUNIOR LORIS     |  --> FP GM PETIT CHEF BV LORIS

filepath : ./LORIS/FP/

从我看到的问题是不同的 ID 可以是 1 个或多个单词的字符串,所以我无法计算单词的数量。也有可能我有一个 ID5 ID6,我需要保留在最后。

我想我的问题是,我怎样才能做到这一点?

我是否需要首先使用值列表中的某种匹配将我的字符串拆分为不同的变量?
如果是这样,我该怎么做?

还是我完全错过了什么?

谢谢

标签: vb.net

解决方案


假设String变量line包含ID1 ## ID2 ID3 ID4. 例如,

Dim line As String = "FP 22 PETIT CHEF BV JUNIOR LORIS"

假设 , 等的可能值列表是ID1' sID2的数组String,即

Dim id1s() As String = { "FP", ... }
Dim id2s() As String = { "PETIT CHEF BV", ... 
...

第一项任务是在 中识别ID1ID2line。你从ID1. 循环遍历所有可能的值,直到找到位于line.

Dim id1 As String
For Each s As String In ids1
    If line.StartsWith(s) Then
        id1 = s
        Exit For
    End If
Next
If id1 Is Nothing Then
    ' Decide what to do in case line does not start with
    ' a known value.
End If

现在,您可以在提取号码并搜索其他 ID 之前按如下方式删除id1line

line = line.Replace(id1 & " ", "")

接下来的两个字符line##. 您可以按如下方式提取它们,然后将它们从line.

Dim n As String = line.Substring(0, 2)
line = line.Replace(n & " ", "")

您现在可以像ID1上面那样提取其他 ID。构建最终文件路径现在很容易,因为它的所有部分都包含在id1, n,id2等中。


推荐阅读