c# - 从大字符串中提取数据

标签 c# winforms string

首先,我正在使用下面的函数从 pdf 文件中读取数据。

public string ReadPdfFile(string fileName)
    {
        StringBuilder text = new StringBuilder();

        if (File.Exists(fileName))
        {
            PdfReader pdfReader = new PdfReader(fileName);

            for (int page = 1; page <= pdfReader.NumberOfPages; page++)
            {
                ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
                string currentText = PdfTextExtractor.GetTextFromPage(pdfReader, page, strategy);

                currentText = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(currentText)));
                text.Append(currentText);
                pdfReader.Close();
            }
        }
        return text.ToString();
    }

如您所见,所有数据都保存在一个字符串中。字符串看起来像这样:

label1: data1;
label2: data2;
label3: data3;
.............
labeln: datan;

我的问题:如何根据标签从字符串中获取数据? 我试过这个,但我被卡住了:

   if ( string.Contains("label1")) 
   {
       extracted_data1 = string.Substring(string.IndexOf(':') , string.IndexOf(';') - string.IndexOf(':') - 1);
   }
   if ( string.Contains("label2"))
   {
       extracted_data2 = string.Substring(string.IndexOf("label2") + string.IndexOf(':') , string.IndexOf(';') - string.IndexOf(':') - 1); 
   } 

最佳答案

看看 String.Split() function , 它根据提供的字符数组标记字符串。

例如

 string[] lines = text.Split(new[] {';'}, StringSplitOptions.RemoveEmptyEntries);

现在遍历该数组并再次拆分每个数组

foreach(string line in lines) {
      string[] pair = line.Split(new[] {':'});
      string key = pair[0].Trim();
      string val = pair[1].Trim();
      ....
   }

明显检查空行,并在需要的地方使用 .Trim()...

[编辑] 或者作为一个很好的 Linq 语句...

var result = from line in text.Split(new[] {';'}, StringSplitOptions.RemoveEmptyEntries)
             let  tokens = line.Split(new[] {':'})
             select tokens;

Dictionary<string, string> = 
       result.ToDictionary (key => key[0].Trim(), value => value[1].Trim());

关于c# - 从大字符串中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9717398/

相关文章:

c# - 如何调整图表的大小超过屏幕分辨率?

c# - 格式化带有公制前缀的数字?

C# linq 联合问题

c# - 是否可以增加 winform 中日历弹出窗口的大小?

c# - xaml.cs 中的 Xamarin 局部变量并通过 XAML 文件打印

winforms - WinForms打开弹出用户控件作为menuitem菜单下拉菜单?

java - 如何在数组中添加字符数量?

c++ - getline(cin,str) 的奇怪输出

c# - excel 文件的自动更新程序

c# - 隐藏我的网站是用 ASP.NET 构建的事实