读取文本文件并增加字符串版本

时间:2017-05-19 11:12:53

标签: c# parsing file-io replace

我正在研究c#中的小应用程序。我必须阅读文本文件并更新具体数字(+1)。任何人都可以帮助我

序列号'主要版本号'。'次要版本号'。'服务包编号' (将次要版本号更新为仅+1,从Sr号更新第二位数)

如果如何处理串行线路的定位问题,有时它包含:SerialNo:,有时Sr No

文本文件信息如下

Product Code: Prd1001
Description:  Item 1
SerialNo :  1.0.0
Mfg Date: 12/Jan/2017

更新后

Product Code: Prd1001
Description:  Item 1
SerialNo :  1.1.0
Mfg Date: 12/Jan/2017

Product Code: Prd1001
Description:  Item 1
Sr No 1.1.1 
Mfg Date: 12/Jan/2017

更新后

Product Code: Prd1001
Description:  Item 1
Sr No 1.2.1 
Mfg Date: 12/Jan/2017

任何人都可以帮助我

由于

2 个答案:

答案 0 :(得分:0)

有关如何更新第一种文件格式的示例代码:

var text = "Product Code: Prd1001\r\nDescription:  Item 1\r\nSerialNo :  1.0.0\r\nMfg Date: 12/Jan/2017";
var updatedText = "";

foreach(var line in text.Split(new string[] { Environment.NewLine }, StringSplitOptions.None))
{
    if(line.StartsWith("SerialNo"))
    {
        var parts = line.Split(new char[] { ':' });
        var serial = parts[1].Trim().Split(new char[] { '.' });

        var majorVersionNo = int.Parse(serial[0]);
        var minorVersionNo = int.Parse(serial[1]);
        var servicePackNo = int.Parse(serial[2]);

        // Make updates. Example:
        servicePackNo++;

        updatedText += "SerialNo : " + majorVersionNo + "." + minorVersionNo + "." + servicePackNo + Environment.NewLine;

    }
    else
    {
        updatedText += line + Environment.NewLine;
    }
}

Debug.Write(updatedText);

答案 1 :(得分:0)

我建议使用ChangeVersion("c:\test.txt", 1) ,以便您处理要增加的版本索引类型。

  • 版本索引= 0 增加主要版本
  • 版本索引= 1 增量次要版本
  • 版本索引= 2 增加Service Pack版本

您可以轻松调用此方法来更改次要版本,例如:

IndexOfAny

我决定使用一种简单的方法来读取每一行并检查它是否包含您的串行操作符然后它会分解您的行以根据所选设置隔离版本和增量。

要找到我使用CharArray版本的第一个版本,然后找到Regex个数字,因为它比使用'Version Index = 0 increment Major Version 'Version Index = 1 increment Minor Version 'Version Index = 2 increment Service Pack Version Public Sub ChangeVersion(ByVal FilePath As String, ByVal VersionIndex As Integer) Dim lines() As String = IO.File.ReadAllLines(FilePath) For i = 0 To lines.Count - 1 Dim line As String = lines(i) If line.Contains("Sr No") Or line.Contains("SerialNo") Then Dim ix As Integer = line.IndexOfAny("1234567890".ToCharArray) Dim early As String = line.Substring(0, ix) Dim sversions() As String = Split(line.Remove(0, ix), ".") If VersionIndex = 0 Then sversions(0) = CInt(sversions(0)) + 1 ElseIf VersionIndex = 1 Then sversions(1) = CInt(sversions(1)) + 1 ElseIf VersionIndex = 2 Then sversions(2) = CInt(sversions(2)) + 1 Else MsgBox("Version Index Error") End If Dim NewVersion As New Version(sversions(0), sversions(1), sversions(2)) lines(i) = early & NewVersion.ToString End If Next IO.File.WriteAllLines(FilePath, lines) End Sub 更快,内存消耗更少。 这是功能:

@echo off    
echo "Salesman Code","Salesman Name","Description","Manager Code","Region","Reg SM#","Reg SM Long" > CO_REPNEW.CSV
type CO_REP.CSV >> CO_REPNEW.CSV
del CO_REP.CSV
ren CO_REPNEW.CSV CO_REP.CSV