Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用c#中的大文本?_C#_Algorithm_Text - Fatal编程技术网

如何使用c#中的大文本?

如何使用c#中的大文本?,c#,algorithm,text,C#,Algorithm,Text,我正在编辑我以前编写的一些列表,这些列表在循环中使用if条件,但是如果文本文件超过大约20MB它会显示溢出。如果超过1 MB,则永远加载。比如说 string[] x = File.ReadAllLines(openFileDialog1.FileName); string a = ""; for (int i = 0; i < x.Length; i++) { if (x[i].Length > 9 && x[i] < 13) {

我正在编辑我以前编写的一些列表,这些列表在循环中使用
if
条件,但是如果文本文件超过大约20MB它会显示溢出。如果超过1 MB,则永远加载。比如说

string[] x = File.ReadAllLines(openFileDialog1.FileName);

string a = "";

for (int i = 0; i < x.Length; i++)
{
    if (x[i].Length > 9 && x[i] < 13)
    {
        a += "" + x[i] + "\r\n";
    }
}
string[]x=File.ReadAllLines(openFileDialog1.FileName);
字符串a=“”;
对于(int i=0;i9&&x[i]<13)
{
a+=“+x[i]+”\r\n”;
}
}

这只是一个例子,如果你知道一个可以帮助我的主题,请发布它

你应该使用BufferedStream对象来读/写更大的文件,它还可以提高执行时间

   using (FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
   using (BufferedStream bs = new BufferedStream(fs))
   using (StreamReader sr = new StreamReader(bs))
   {
    string line;
    while ((line = sr.ReadLine()) != null)
    {
       //write your logic here
    }
   }
更新: 通过链接以最快的方式读取文件

您应该使用BufferedStream对象来读/写更大的文件,它还可以缩短执行时间

   using (FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
   using (BufferedStream bs = new BufferedStream(fs))
   using (StreamReader sr = new StreamReader(bs))
   {
    string line;
    while ((line = sr.ReadLine()) != null)
    {
       //write your logic here
    }
   }
更新: 通过链接以最快的方式读取文件

从将
字符串更改为
StringBuilder
开始:

string[] x = File.ReadAllLines(openFileDialog1.FileName);

StringBuilder sb = new StringBuilder();

//TODO: x[i] < 13 (taken from the question) seems to be erroneous
// Do you mean x[i].Length < 13?
for (int i = 0; i < x.Length; i++)
  if (x[i].Length > 9 && x[i] < 13) 
    sb.AppendLine(x[i]);

string a = sb.ToString();
string[]x=File.ReadAllLines(openFileDialog1.FileName);
StringBuilder sb=新的StringBuilder();
//TODO:x[i]<13(取自问题)似乎是错误的
//你是说x[i],长度<13?
对于(int i=0;i9&&x[i]<13)
sb.AppendLine(x[i]);
字符串a=sb.ToString();
下一次尝试可以是Linq,如下所示:

string a = string.Join(Environment.NewLine, File
  .ReadLines(openFileDialog1.FileName)
  .Where(line => line.Length > 9 && line.Length < 13));
string a=string.Join(Environment.NewLine,文件
.ReadLines(openFileDialog1.FileName)
其中(直线=>直线长度>9和直线长度<13));

执行
a+=
时,重新创建
a
string
string
是不可变的类,不能修改);在循环中重新创建
字符串
看起来非常缓慢
StringBuilder
是专门为此类情况设计的类。

从将
String
更改为
StringBuilder
开始:

string[] x = File.ReadAllLines(openFileDialog1.FileName);

StringBuilder sb = new StringBuilder();

//TODO: x[i] < 13 (taken from the question) seems to be erroneous
// Do you mean x[i].Length < 13?
for (int i = 0; i < x.Length; i++)
  if (x[i].Length > 9 && x[i] < 13) 
    sb.AppendLine(x[i]);

string a = sb.ToString();
string[]x=File.ReadAllLines(openFileDialog1.FileName);
StringBuilder sb=新的StringBuilder();
//TODO:x[i]<13(取自问题)似乎是错误的
//你是说x[i],长度<13?
对于(int i=0;i9&&x[i]<13)
sb.AppendLine(x[i]);
字符串a=sb.ToString();
下一次尝试可以是Linq,如下所示:

string a = string.Join(Environment.NewLine, File
  .ReadLines(openFileDialog1.FileName)
  .Where(line => line.Length > 9 && line.Length < 13));
string a=string.Join(Environment.NewLine,文件
.ReadLines(openFileDialog1.FileName)
其中(直线=>直线长度>9和直线长度<13));

执行
a+=
时,重新创建
a
string
string
是不可变的类,不能修改);在循环中重新创建
字符串
看起来非常缓慢
StringBuilder
是专门为这种情况设计的类。

虽然缓冲流在很多情况下都是有意义的(我不知道它在这种特定情况下有多大帮助——基于磁盘的IO已经缓冲),但解决这个问题的主要方法是每次读取一行。所以我建议把这作为回答的重点。@LarsMøllebjerg你是对的。在这里,我为处理更大的文件编写了工作代码。我很高兴我提出了两个让我的生活更轻松的新想法^^^^而缓冲流在很多情况下肯定是有意义的(我不知道在这种特定情况下它有多大帮助-基于磁盘的IO已经缓冲了),解决他的问题的主要方法是你一次读一行。所以我建议把这作为回答的重点。@LarsMøllebjerg你是对的。在这里,我为处理更大的文件编写了工作代码。我很高兴我提出了两个让我的生活更轻松的新想法^^