2012-03-17 2 views
5

Мне нужно загрузить длинную линию veeeery с консоли на C#, до 65000 символов. Сам Console.ReadLine имеет предел 254 символов (+2 для управляющих последовательностей), но я могу использовать это:Как читать очень длинный ввод с консоли в C#?

static string ReadLine() 
{ 
    Stream inputStream = Console.OpenStandardInput(READLINE_BUFFER_SIZE); 
    byte[] bytes = new byte[READLINE_BUFFER_SIZE]; 
    int outputLength = inputStream.Read(bytes, 0, READLINE_BUFFER_SIZE); 
    Console.WriteLine(outputLength); 
    char[] chars = Encoding.UTF7.GetChars(bytes, 0, outputLength); 
    return new string(chars); 
} 

... преодолеть этот предел, до 8190 символов (+2 для управляющих последовательностей) - к сожалению, мне нужно ввести WAY более крупную линию, и когда для READLINE_BUFFER_SIZE установлено значение больше 8192, в VS появляется сообщение об ошибке «Недостаточно памяти для обработки этой команды». Буфер должен быть установлен на 65536. Я пробовал пару решений, чтобы сделать это, но я все еще учился, и ни один из них не превышал 1022 или 8190 символов, как я могу увеличить этот предел до 65536? Заранее спасибо.

+1

Не можете ли вы сбросить ввод в файл temp и просто передать имя файла в консоли? – digEmAll

+0

Я не могу набрать более 8190 символов, это просто не позволит мне входить больше. Я могу сохранить данные в файл, но мне нужен способ получить огромный вклад. –

+1

Каков ваш сценарий? Я не уверен, что вы пытаетесь решить правильную проблему. – Onkelborg

ответ

1

попробовать Console.Read с StringBuilder

 StringBuilder sb =new StringBuilder(); 
     while (true) { 
      char ch = Convert.ToChar(Console.Read()); 
      sb.Append(ch); 
      if (ch=='\n') { 
       break; 
      } 
     } 
+0

Это работало, спасибо :) Я тоже пытался использовать это, но я использовал \ r \ n, а не \ n, и он просто пропустил инструкцию break. –

+0

Как именно вы, ребята, получили это, чтобы работать. Мне нужно консольное приложение, которое может принимать BigIntegers или просто действительно большие числа, и я не могу заставить его работать. Я могу получить максимальный ввод, который нужно создать, используя 'Console.SetIn (новый StreamReader (Console.OpenStandardInput (8192))); ' – Chisx

1

Вы должны добавить следующую строку кода в main() метода:

byte[] inputBuffer = new byte[4096]; 
       Stream inputStream = Console.OpenStandardInput(inputBuffer.Length); 
       Console.SetIn(new StreamReader(inputStream, Console.InputEncoding, false, inputBuffer.Length)); 

Затем вы можете использовать Console.ReadLine(); для чтения длинного пользовательского ввода.

Смежные вопросы