2012-03-17 11 views
5

Ho bisogno di caricare la lunga fila di veeeery dalla console in C#, fino a 65000 caratteri. Console.ReadLine sé ha un limite di 254 caratteri (+2 per sequenze di escape), ma può utilizzare questo:Come leggere un input molto lungo dalla console in 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); 
} 

... di superare tale limite, fino a 8190 caratteri (+2 per sequenze di escape) - sfortunatamente ho bisogno di inserire la linea WAY più grande, e quando READLINE_BUFFER_SIZE è impostato su qualcosa di più grande di 8192, l'errore "Memoria insufficiente per elaborare questo comando" si presenta in VS. Il buffer dovrebbe essere impostato su 65536. Ho provato un paio di soluzioni per farlo, eppure sto ancora imparando e nessuno ha superato i 1022 o gli 8190 caratteri, come posso aumentare quel limite a 65536? Grazie in anticipo.

+1

Non è possibile scaricare l'input in un file temporaneo e passare semplicemente il nome del file nella console? – digEmAll

+0

Non riesco a digitare più di 8190 caratteri, semplicemente non mi permetterà di entrare più. Posso salvare i dati nel file, ma ho bisogno di un modo per ottenere un input enorme. –

+1

Qual è il tuo scenario? Non sono sicuro che tu stia cercando di risolvere il problema giusto – Onkelborg

risposta

1

provare Console.Read con StringBuilder

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

Questo ha funzionato, grazie :) Ho provato a usare anche questo, ma ho usato \ r \ n, non \ n, e ho saltato l'istruzione di interruzione. –

+0

In che modo esattamente voi ragazzi avete funzionato. Ho bisogno di un'applicazione per console che possa prendere BigIntegers o solo numeri veramente molto grandi e non riesco a farlo funzionare .. Posso solo ottenere il massimo input usando 'Console.SetIn (nuovo StreamReader (Console.OpenStandardInput (8192))); ' – Chisx

1

È necessario aggiungere seguente riga di codice nel tuo main() metodo:

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

quindi è possibile utilizzare Console.ReadLine(); leggere l'input dell'utente lungo.

Problemi correlati