c# - 如何将一串文本添加到另一个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;
}
}
解决方案
假设您逐行读取文件。您可以根据以下内容验证每一行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]
推荐阅读
- r - Selenium 消息:过时的元素引用:元素未附加到页面文档
- javascript - 如何测试从外部导入组件的功能?
- r - 如何计算不同变量的不同列数之间的最大差异
- yum - 无法运行'yum update'
- reactjs - 导航器缺少导航道具。在 react-navigation 中,您必须直接设置您的应用容器
- vue.js - Nuxtjs 与 i18n-iso-country
- c++ - 二进制表达式 cout 问题的无效操作数
- java - Spring Security:谁将 AuthenticationManagerBuilder 传递给 WebSecurityConfigurerAdapter 配置方法?
- jquery - 点击时带href的跨度
- jquery - Django 数据表服务器端处理与 djang 模板引擎有问题