使用带有规则的预定义结构重写文件名

时间:2019-07-01 16:02:13

标签: vb.net

我需要一些帮助来构造问题,然后对它进行编码。

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

ID1 ## ID2 ID3 ID4

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

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

其中 ## 是数字

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

首先,我需要检索ID1
然后我需要根据ID1,我需要应用一个规则,确定该号码应替换为 PM 还是 GM

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,我需要将其保留在最后。

我想我的问题是,我该如何实现?

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

还是我完全错过了什么?

谢谢

1 个答案:

答案 0 :(得分:0)

比方说String变量line包含ID1 ## ID2 ID3 ID4。例如,

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

假设ID1ID2等的可能值列表是String的数组,即,

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

第一个任务是在ID1中标识ID2line等。您从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

现在,您可以按照以下步骤从id1中删除line,然后提取数字并搜索其他ID。

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

line中的后两个字符是##。您可以按以下方式提取它们,并将其从line中删除。

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

您现在可以像在上面的ID1中那样提取其他ID。现在,构建最终文件路径非常容易,因为您将其所有部分都放在id1nid2等中。