通过char读取char是最好的解决方案吗?

时间:2014-06-16 10:31:44

标签: c# text-files

所以我必须从文件中获取一些数据并将其保存到数据库中。

文件的结构在开始时有一些配置行,然后有"$START"文本开始我的操作。

我正在徘徊如何在此标记("$START")之前获取所有信息,然后继续进行。

我无法逐行搜索,因为在"$START"声明之后,16k字符行只有一个长...

我暂时没有处理文件,所以我的问题是什么是最佳解决方案?

3 个答案:

答案 0 :(得分:2)

您可以使用string.Split()

string data = "...your text data";
string[] splitted = data.Split(new string[] { "$START" }, StringSplitOptions.None);

然后,您将数据的两个部分分开,您可以像这样访问它们:

string configuration = splitted[0];
string data = splitted[1];

答案 1 :(得分:1)

你认为最好的是问题,但这肯定很容易维护和理解。此示例使用正则表达式:

string yourTextFileString = File.ReadAllBytes(@"filename.txt");

string textAfterStart = Regex.Replace(yourTextFileString, @"(.*)\$START(.*)", "$2", RegexOptions.Singleline);

答案 2 :(得分:0)

好吧,如果我做得对,你就有这样的文件:

IMPORTANT_CODE_ $ START_UNINPORTANT_CODE

你可以做到

    String yourTextFile = File.ReadAllText("filename.txt");
    string importantText = yourTextFile.Substring(0, yourTextFile.IndexOf("$START"));

但如果文件很大,你应该这样做:

    string operation = String.Empty;
    using (Stream s = new FileStream("filename.txt", FileMode.Open))
    {
        byte[] buffer = new byte[1024];
        string text = String.Empty;
        while (s.Read(buffer, 0, buffer.Length) > 0)
        {
            text += Encoding.UTF8.GetString(buffer);
            if (text.Contains("$START"))
            {
                operation = text.Substring(0, text.IndexOf("$START"));
                break;
            }
        }
    }
    Console.WriteLine("Your operation: {0}", operation);