【问题标题】:Reading specific part of a File Content读取文件内容的特定部分
【发布时间】:2011-09-08 17:48:46
【问题描述】:

如何在Starting Index 和第一次遇到的Ending Index 之间的另一个字符串中读取一个字符串

我有一个巨大的文件,其中包含每个客户的信息,他们将客户信息与开始和结束索引分开,我需要获取特定的客户信息来显示。

    Dim oFile As New FileInfo(sFileName)
    Dim sFileContent As String = oFile.OpenText().ReadToEnd()
    Dim iStartIndex As Integer = sFileContent.IndexOf(roNotification.StartByte)
    Dim iEndIndex As Integer = sFileContent.IndexOf(roNotification.EndByte, iStartIndex)
    Dim sCustomerInfo As String = sFileContent.Substring(iStartIndex + roNotification.StartByte.Length - 1, iEndIndex)

没什么。但它会读取文件并将那个巨大的文件放入sFileContent 变量中。我不确定这种方式的效率如何(似乎比 MemoryStream 差)。

索引字符串可以多于 1 个字符。

编辑:

有关文件的更多信息,该文件仅包含一大行,而该行包含所有信息。除了阅读它之外,我无法触及该文件,因为它包含非常机密的数据。

我正在寻找起始索引和第一次遇到的结束索引之间的字符串。

【问题讨论】:

  • 你说这是一个“巨大”的文件——有多大?性能在这里有多重要?它真的是您要查找的字符串“起始索引”吗?文件是否被分成几行或其他有用的东西?
  • 请参考我的编辑,@Jon Skeet。谢谢
  • MemoryMappedFile 可能是一个值得考虑的选项,尤其是如果您非常清楚要在文件中的哪个位置查找数据。
  • Starting IndexEnding Index 是字符串吗?如果是这样,请编辑问题以使其更清楚(围绕您定义这些值的位置)

标签: c# .net regex vb.net


【解决方案1】:

你应该逐行阅读文件:

Using reader = file.OpenText()
    Dim line As String
    While True
        line = reader.ReadLine()
        If ReferenceEquals(Line, Nothing) Then Exit While

        'Parse the line and figure out what to do with it
    End While
End Using

这样,您一次不会有超过一行的内存。

【讨论】:

  • 只有一行,一条巨行,包含了一切。
  • 那么就完全看文件长什么样了。
【解决方案2】:

不要阅读整行

创建一个二进制/文本阅读器并使用开始和结束索引调用 read 方法。如果文件很大,则使用二进制阅读器或类似的东西进行优化。

来自 -- http://msdn.microsoft.com/en-us/library/9kstw824.aspx

 using (StreamReader sr = new StreamReader(path)) 
        {
            //This is an arbitrary size for this example.
            char[] c = null;

            while (sr.Peek() >= 0) 
            {
                c = new char[5];
                sr.Read(c, 0, c.Length);
                //The output will look odd, because
                //only five characters are read at a time.
                Console.WriteLine(c);
            }
 }

【讨论】:

  • 谢谢,但我的情况对于像你这样的解决方案来说真的太复杂了。我希望它可以更具解释性,这就是为什么我问了一个简单的问题并将处理其余的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-28
  • 2013-09-13
  • 1970-01-01
  • 1970-01-01
  • 2018-12-02
  • 1970-01-01
相关资源
最近更新 更多