Сегодня я узнал, почему эта проблема возникает или как эта проблема возникает при чтении строки за строкой из текстового файла с использованием C# ReadLine().ReadLine() не удалось прочитать целую строку
Проблема:
Предположим, есть 3 строки в текстовом файле. Каждый из которых имеет длину равную 400. (вручную подсчитывается) при чтении строки из C# ReadLine() и проверки длины в Console.WriteLine (str.length); я узнал, что она печатает:
Line 1 => 400
Line 2 => 362
Line 3 => 38
Line 4 => 400
Я был смущен и что текстовый файл имеет только три строки, почему его печать 4, что тоже с длиной изменилась. Затем я быстро проверил «\ n» или «\ r» или комбинацию «\ r \ n», но я не нашел их, но я обнаружил, что во второй строке было 2 двойных кавычки ex => «abcd».
Затем я изменил код, чтобы напечатать строки себя и мальчик я был Amaze, я получаю выход в консоли как:
Line 1 > blahblahblabablabhlabhlabhlbhaabahbbhabhblablahblhablhablahb
Line 2 > blablabbablablababalbalbablabal"blabablhabh
Line 3 > "albhalbahblablab
Line 4 > blahblahblabablabhlabhlabhlbhaabahbbhabhblablahblhablhablahb
теперь я попытался удалить двойные кавычки «» с помощью функции замены, но я получил то же самое 4 строки выводятся без двойных кавычек.
Теперь, пожалуйста, дайте мне знать любые решения, кроме ручного редактирования, для преодоления этого сценария. Вот мой код простой код:
static void Main(string[] args)
{
FileStream fin;
string s;
string fileIn = @"D:\Testing\CursedtextFile\testfile.txt";
try
{
fin = new FileStream(fileIn, FileMode.Open);
}
catch (FileNotFoundException exc)
{
Console.WriteLine(exc.Message + "Cannot open file.");
return;
}
StreamReader fstr_in = new StreamReader(fin, Encoding.Default, true);
int cnt = 0;
while ((s = fstr_in.ReadLine()) != null)
{
s = s.Replace("\""," ");
cnt = cnt + 1;
//Console.WriteLine("Line "+cnt+" => "+s.Length);
Console.WriteLine("Line " + cnt + " => " + s);
}
Console.ReadLine();
fstr_in.Close();
fin.Close();
}
Примечания: я пытался читать и загружать 37 текстовые файлы по 500 Мб каждый из области финансов, где я всегда сталкиваюсь с этим вопросом и должен вручную делать изменения. :(
Вы уверены, что выбор кодировки верен? – Jon
Я предлагаю вам эту строку иначе: while ((s = fstr_in.ReadLine())!= null) Попробуйте что-то вроде: using (StreamReader fstr_in = new StreamReader (fileIn)) \t { \t line = fstr_in.ReadLine(); \t} – NoChance
Котировки - это красная сельдь. Там просто символ линии/символ новой строки (или что-то интерпретируется как оно) в позиции, где строка 2 неверно переходила к строке 3. @Jon на что-то с кодировкой. Если вы выбрали неправильную кодировку, то что-то, что должно было быть прочитано вместе с предыдущим или следующим байтом, чтобы повлиять на персонажа, теперь читается как персонаж сам по себе, и, случается, это то, что ломает линию. –