Konsola: brak miejsca?

0

Mam problem w pisaniu programu w konsoli, a konkretnie brak możliwości wpisania więcej niż 255 znaków za pomocą funkcji string str = Console.ReadLine(); kiedy staram się wpisać więcej niż te 255 znaków po prostu się one nie pojawiają i nie zapisują do string-a.

Mam jeszcze pytanie w sprawie tego zadania: http://www.oi.edu.pl/php/show.php?ac=p171100&module=show&file=zadania/oi13/kra
rozwiązałem je szybciutko tylko mam pytanko w sprawie tego 'wejścia' zrobiłem to bardzo na siłe i zajeło mi to sporo linijek kodu, wrzuciłem to w funkcje i jej używam i jest git ;-) ale... nie wiem czy nie można tego zrobić łatwiej, oto kodzik:
Chodzi tutaj ogólnie oto żeby odczytać CAŁOŚĆ stringu -> zapisać -< znaleŹć znaki spacji -> poćwiartować na mniejsze -> wpisać do tablicy i potem robić na niej różnego typu operacje

public static Int64[] wczytywanie(int max)
        {
            char[] ch = new char[max];
            Int64[] liczby = new Int64[max];
            Int64 liczba = 0;
            Int64 hej = 0;
            Int64 s2 = 0;
            string x;
            <b>x = Console.In.ReadLine() + " ";</b> // - problemas 255 znaki (?)
            ch = x.ToCharArray();
            for (int s1 = 0; s1 < x.Length; s1++)
            {
                if (Char.IsWhiteSpace(ch[s1]))
                {
                    liczby[s2] = Int64.Parse(x.Substring(int.Parse(hej.ToString()), int.Parse(liczba.ToString())));
                    hej = hej + (liczby[s2].ToString()).Length + 1;
                    s2++;
                    liczba = 0;
                }
                else
                {
                    liczba++;
                }
            }
            Int64[] liczby_ok = new Int64[s2];
            for (int o = 0; o < max; o++)
            {
                if (liczby[o] != 0)
                {
                    liczby_ok[o] = liczby[o];
                }
            }
            return (liczby_ok);

        } 

pewnie sporo można w tym zmienić ale tyle się nad tym głowiłem że na strzępkach nerwów to pisałem i chodziło mi tylko oto aby zadziałało .. ha! i działa :]
Pozdrawiam.

0

Nie wiem czy o to Ci chodziło (Twój kod to starszny burdel, nie chce mi się w niego zagłebiać), ale "ćwiartowanie" najlepiej rozwiązać tak: (pisane z palca)

string przykładowy = "123 142 4223 123312";
string[] cwiartki = przykladowy.Split(' ');
0

wielkie dzięki na pewno mi to pomoże ;-)
a co do tego limitu znaków masz może jakieś rady ?
jak w programie napisze:
string str = Console.ReadLine()
to moge tylko wklepać 255 znaków..

0

Nie jestem pewien czy działa (2000 znaków):

byte[] bytes = new byte[2000]; 
Stream inputStream = Console.OpenStandardInput(bytes.Length); 
Console.SetIn(new StreamReader(inputStream)); 
string body = Console.ReadLine(); 
0

dzięki wielkie ! działa

0

niestety się pospieszyłem.. moge wpisać tylko 1022 znaki do konsoli:

            byte[] bytes = new byte[21]; // nie ma znaczenia jaką wartość tu wpisze i tak moge max 1022 znakow
            Stream inputStream = Console.OpenStandardInput(bytes.Length);
            Console.SetIn(new StreamReader(inputStream));
            string body = Console.ReadLine();
            Console.WriteLine("Długość: {0}", body.Length);
            Console.ReadKey();
0

Sorry odpowiedź była kopiowana bezpośrednio z jakiejś strony.. Ile znaków potrzeba?

0

niestety sporawo 300 000 :|
EDIT: sorki za pomyłke

0

http://dotnetjunkies.com/WebLog/joewood/archive/2005/01/31/49440.aspx
Spróbuj z tym, ale coś mi się widzi, że pamięci zabraknie na 300 000 znaków...

0

No to uzyj Console.In.Read() w petli i bedziesz mial tyle ile trzeba.

PS. 300k znakow i zabraknie pamieci? - przeciez to 300kB przy jednobajtowym char...

pozdrawiam
johny

0

Kyh, johny zrobiłem taki bufor (300k) i VS sypnął wyjątkiem -> "Zabrakło miejsca w magazynie" cokolwiek to nie znaczy :)

0
Lukke napisał(a)

Kyh, johny zrobiłem taki bufor (300k) i VS sypnął wyjątkiem -> "Zabrakło miejsca w magazynie" cokolwiek to nie znaczy :)

A co to za bufor? Ja bym uzyl np. MemoryStream, ale chwilowo nie mam jak przetestowac.

pozdrawiam
johny

0

Dla tego przykładu co dawałem ze strony. To był zwykły Stream i w momencie robienia Stream.Read sypało wyjątkiem.

0

Ja mam taki przyklad. Pisany z biegu, wiec to tylko przyklad, ze mozna, nie jako przyklad dobrego kodu :P

			int vCapacity = 300000;
			MemoryStream vStream = new MemoryStream(vCapacity);
			while(true)
			{
				int vRet;
				if((vRet = Console.In.Read())!=-1)
				{
					byte [] vTab = System.Text.Encoding.Default.GetBytes(vRet.ToString());
					vStream.Write(vTab, 0, vTab.Length);
					Console.WriteLine(vStream.Length);
				}
			}

Na tym dolecialem do ok. 4,8M znakow (pare razy skopiowany ebook), wiec mozna sie spodziewac, ze mozna poszalec ile RAMu staje :)

pozdrawiam
johny

0

Chyba nie oto mi chodziło ( albo ja się nie znam ) bo limit 256 nadal jest spróbuj wisać ręcznie kilka wierszy np. '4' i tam się zawiesza na 256 znaku, jak wklejamy jakiś bardzo długi tekst to tam automatycznie już są wcięcia i wszystko jest ok, ale w moim programie ja potrzebuje wpisać wszystkie dane bez używania ENTER - 30000 znaków.
uff.. sam już nie wiem, ale się zagmatwałem ;-P
pzdr i dzięki

PS. też mi wyszkoczył błąd: "Zabrakło miejsca w magazynie" ale to chyba można w jakiśsposób obejść ide googlać

1 użytkowników online, w tym zalogowanych: 0, gości: 1