首页 > 解决方案 > 如何将一串文本添加到另一个txt文件中

问题描述

我有这个包含此文本的 txt 文件:

MSH^~|\&^R3POCQUERYS^050~BCMABU.MED.VA.GOV~DNS^R3POCQUERYR^^201711081317040500^^RQC~I06^50279320^D^2.5^^AL^NE^USA

QRD^20171108131704-0500^R^I^WQRY^^^^SSN~% ABC123 ^9A-MED~ WA0034 ^^^T

但我只想要 SSN~% 和 MED~ 之后的值

我希望能够从以 QRD 开头的行中读取,然后能够在 SSN~% 和 MED~ 之后获取任何值,因此该值可以是我仅使用 ABC123 和 WA0034 作为示例的任何值。

Form1.cs

private void Parse(string filename)
        {
            string line;
            var str = File.ReadAllText(filename);
            System.IO.StreamReader file = new System.IO.StreamReader(filename);
            targetRichTextBox = richTextBox1;
            WriteTextSafelyInRichTextBox(str);


            while ((line = file.ReadLine()) != null)
            {
                if ((line.Contains("QRD"))
                {
                    //Enter code here
                }
            }
            char[] delimiterChars = { '^' };
            string[] words = str.Split(delimiterChars);
            var createText = (RetrunTemplate.Get().Replace(words[24], "VHIC-").Replace(words[25], "9A-MED~WA0034"));
            var outputFilename = outputDir + "\\OutboundMessage - " + DateTime.UtcNow.ToString("yyyy-MM-dd HH-mm-ss-ff", CultureInfo.InvariantCulture) + ".txt";
            File.WriteAllText(outputFilename, createText);
            targetRichTextBox = richTextBox2;
            WriteTextSafelyInRichTextBox(createText);
            file.Close();
            File.Delete(filename);
            MessageBox.Show("You have successfuly creatd an outbound Message");
        }

返回模板

class RetrunTemplate
    {
        public static string Get()
        {
            string retrunTemplate = @"MSH^~|\&^R3POCSEND^442~CHEY209.FO-BAYPINES.MED.VA.GOV~DNS^R3POCRCV^^20171108131710-0400^^RCL~I06^442157252912^D^2.5^^^AL^NE^USA" + Environment.NewLine +
"PID^^^4420041228V165312~~~USVHA&&0363~NI~VA FACILITY ID&442&L~~20171108|666393848~~~" + Environment.NewLine +

@"USSSA&&0363~SS~VA FACILITY ID&442&L|""~~~USDOD&&0363~TIN~VA FACILITY ID&442&L" + Environment.NewLine +

@"""~~~USDOD&&0363~FIN~VA FACILITY ID&442&L|7209344~~~USVHA&&0363~PI~VA FACILITY ID&442&L" + Environment.NewLine +

@"^VHIC-ABC123~~~USVHA&&0363~PI~VA FACILITY ID&742V1&L^ZEIGLER~PG~EIGHT~~~~L" + Environment.NewLine +

@"|""~~~~~~N^^19220304^M^^^9234234~""~SAN FRANCISCO~CA~94114~USA~P~""~075|~~SAN JOSE~CO~~""~N^^""^^^^^^^^^^^^^^^^^^" + Environment.NewLine +

@"PV1^^^9A-MED" + Environment.NewLine + "HH1^WA0034";

            return retrunTemplate;
        }
    }

标签: c#.netparsing

解决方案


假设您逐行读取文件。您可以根据以下内容验证每一行Regex,并提取您想要的内容。

var text = "QRD^20171108131704-0500^R^I^WQRY^^^^SSN~%ABC123^9A-MED~WA0034^^^T";
var rgx = new Regex(@"QRD.+SSN~%(.+)MED~(.+)");
var match = rgx.Match(text);
if (match.Success)
{
    Console.WriteLine(match.Groups[1].Value);
    Console.WriteLine(match.Groups[2].Value);
}

match.Groups[1]ABC123^9A-match.Groups[2]WA0034^^^T。_ 您现在可以对这些文本进行任何操作。

正则表达式分解

@"QRD.+SSN~%(.+)MED~(.+)"

  • QRD- 以字符串开头QRD
  • .+- 后跟一个或多个字符
  • SSN~%- 其次是SSN~~%
  • (.+)SSN~%- 在和之间抓取(到 Groups[1])一个或多个字符MED~
  • MED!- 其次是MED~
  • (.+)- 抓住排队中的所有其他东西Groups[2]

推荐阅读