所以我必须从文件中获取一些数据并将其保存到数据库中。
文件的结构在开始时有一些配置行,然后有"$START"
文本开始我的操作。
我正在徘徊如何在此标记("$START")
之前获取所有信息,然后继续进行。
我无法逐行搜索,因为在"$START"
声明之后,16k字符行只有一个长...
我暂时没有处理文件,所以我的问题是什么是最佳解决方案?
答案 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);