【问题标题】:Swap and replace number in text file C#交换和替换文本文件 C# 中的数字
【发布时间】:2021-07-09 06:49:06
【问题描述】:

更新问题:

我有一个 XML 12 文件,每个文件都包含一个序列号,如下所示

File XML1 serial number:
T6115393670010-44_1

File XML2 serial number:
T6115393670010-44_2

File XML3 serial number:
T6115393670010-44_3

File XML4 serial number:
T6115393670010-44_4

File XML5 serial number:
T6115393670010-44_5

File XML6 serial number:
T6115393670010-44_6

File XML7 serial number:
T6115393670010-44_7

File XML8 serial number:
T6115393670010-44_8
File XML9 serial number:
T6115393670010-44_9

File XML10 serial number:
T6115393670010-44_10

File XML11 serial number:
T6115393670010-44_11

File XML12 serial number:
T6115393670010-44_12

我希望更换每个序列号,结果如下: 我提取了该序列号并尝试使用 substring 来删除最后 2 个数字,但这并不是很好,因为序列号不固定。

File XML1 serial number:
T6115393670110-44

File XML2 serial number:
T6115393670210-44

File XML3 serial number:
T6115393670310-44

File XML4 serial number:
T6115393670410-44

File XML5 serial number:
T6115393670510-44

File XML6 serial number:
T6115393670010-44_6

File XML7 serial number:
T6115393670710-44

File XML8 serial number:
T6115393670810-44

File XML9 serial number:
T6115393670910-44

File XML10 serial number:
T6115393671010-44

File XML11 serial number:
T6115393671110-44

File XML12 serial number:
T6115393671210-44

我尝试代码获取序列号:

 string[] filenames = Directory.GetFiles(txtSource.Text, "*.xml");
            foreach (string filename in filenames)
            {
 XDocument doc = XDocument.Load(filename);
 XElement BoardTestXMLExport = doc.Root;
 XNamespace ns1 = BoardTestXMLExport.GetNamespaceOfPrefix("ns1");
          int numberOfComponentsTested = (int)BoardTestXMLExport.Attribute("numberOfComponentsTested");
                    DateTime testerTestStartTime = (DateTime)BoardTestXMLExport.Attribute("testerTestStartTime");
                    DateTime testTime = (DateTime)BoardTestXMLExport.Attribute("testTime");
                    string testStatus = (string)BoardTestXMLExport.Attribute("testStatus");
                    DateTime testerTestEndTime = (DateTime)BoardTestXMLExport.Attribute("testerTestEndTime");
                    XElement BoardXML = BoardTestXMLExport.Element(ns1 + "BoardXML");
                    string serialNumber = (string)BoardXML.Attribute("serialNumber");
             }
     /// * do something here
}

有解决办法吗?请帮我。谢谢!

【问题讨论】:

  • 如果你有总指挥官或类似的,使用正则表达式重命名。更容易
  • 为什么子串不是好办法?
  • @Divisadero 总指挥官可以更改文件内容吗?还是只是文件名?
  • @phuzi "重命名文件" 功能只是重命名文件。
  • @Divisadero OP 要求编辑文件的内容而不是重命名它们

标签: c# text replace


【解决方案1】:

正则表达式是子字符串的替代品(尤其是当我们有复杂的转换时):

  using System.Text.RegularExpressions;

  ...

  static string Transform(string line) => Regex.Replace(
      line,
    @"(?<prefix>T[0-9]{9,})(?<remove>0{2})(?<suffix>[0-9]{2}-[0-9]{2})(?<num>_[0-9]+)$",
      m => m.Groups["prefix"].Value +
           m.Groups["num"].Value.TrimStart('_').PadLeft(2, '0') + 
           m.Groups["suffix"].Value);

然后

  string fileName = @"c:\myFile"; 

  File.WriteAllLines(fileName, File
    .ReadLines(fileName)
    .Select(line => Transform(line))
    .ToArray());
 

【讨论】:

    【解决方案2】:

    只需读取文件,修改内容并写回文件(我假设数字不会超过 2 位,因为您要插入数字的位置只有两个字符):

    // read all lines
    var lines = File.ReadAllLines(pathToFile);
    // modify content
    lines = lines
        .Select(l =>
        {
            var code = l.Substring(0, l.LastIndexOf('_'));
            var number = l.Substring(l.LastIndexOf('_') + 1).PadLeft(2, '0');
            return code.Remove(10, 2).Insert(10, number);
        }).ToArray();
    // write back to file
    File.WriteAllLines(pathToFile, lines);
    

    【讨论】:

    • 我认为不止于此:必须在主字符串中插入 _ 之后的数字
    • @auburg 是的,错过了。谢谢
    猜你喜欢
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多