繁体   English   中英

从具有不同分隔符的文本文件中提取数据

[英]Extracting data from text file with differing delimiters

我有一个需要拆分为数组的文本文件,数组的每个元素将包含 1 个人的数据。 然后,我将使用 Regex (C#) 提取该人的所有数据。 我遇到的问题是匹配每个人的开头,因为文件中的模式发生了变化。 见下文:

数据的简化版本如下:

地址 FirstName \r\nSurname NHS No Age = 44\r\n
地址 FirstName\r\n 姓 NHS No 12345\r\n
地址 FirstName\r\n Surname NHS No Age = 35\r\n
地址 FirstName \r\n姓 NHS No 54321\r\n

如您所见,文件中有换行符,因此 StreamReader.Readline() 方法可能不起作用。 地址名称和姓氏字段是固定长度字段,我可以使用 substring 提取这些字段。 一旦我对每个人的开始/结束有了一致的标记,我就可以分成一组人。

我需要使用 Regex.Replace 添加一个人开始标记,然后使用此标记拆分为数组。 我将不胜感激。

有些人在遇到问题时会想“我知道,我会使用正则表达式”。 现在他们有两个问题。 杰米·扎温斯基

您确信正则表达式会使您的代码更易于编写、阅读和维护吗?

考虑改用String.Split()

从您的评论来看,无论格式的细微差别如何,每一行似乎都代表一个实体。 首先,您可以逐行读取文件,并使用String.Split将每一行拆分为单词:

using (StreamReader sr = new StreamReader("addresses.txt")) 
{
     string line;
     // Read and display lines from the file until the end of 
     // the file is reached.
     while ((line = sr.ReadLine()) != null) 
     {
         string[] tokens = line.Split(' ');

         // variant 1: Address FirstName Surname NHS No //Person1 Age = 44
         // variant 2: Address FirstName Surname NHS No //person 2 12345

         Console.Writeline("Address: ", tokens[0]);
         Console.Writeline("First name: ", tokens[1]);

         // etc.
     }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM