Wczytywanie liczb z pliku txt - wprowadzanie ścieżki z klawiatury

0

witam
Otóż mam kilka problemów związanych z wyświetlaniem liczb z pliku txt. Wszystkie problemy przedstawiłem w komentarzach w poniższym kodzie. Z góry dziękuje wam za odpowiedzi.

a i to ma być wczytywane z pliku który idzie schematem np.

3 2 1 0 3 0
2 1 3 5 6 7
2 3 4 5 6 7

itd. może być różna ilość kolumn i wierszy

using System;
using System.IO;
using System.Collections.Generic;

namespace Example
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Podaj ścieżkę do pliku txt np. \nD:\liczby.txt"); //czemu tutaj jest błąd ?
            string l = Console.ReadLine();
            String path = @l; 
            String[] items = File.ReadAllText(path).
            Split(new String[] { " ", Environment.NewLine },
            StringSplitOptions.RemoveEmptyEntries);
            List<int> numbers = new List<int>();
            foreach (String item in items)
            {
                int value = 0;
                if (Int32.TryParse(item.Trim(), out value))
                {
                  numbers.Add(value);
                }
                else
                {
                  Console.WriteLine("Wartosc nie liczbowa "/* tutaj chciałbym aby wypisywało znak typu string który nie jest liczbą bo gdy teraz kompiluje to wychodzi mi system.string []*/ +items.ToString() );
                }
            }
            Console.WriteLine("Liczby zawarte w pliku:");
            foreach (int number in numbers)
            {
                Console.Write(number +" "); 
               // jak mam tutaj wpisać warunek jeśli chciałbym aby przedstawione na konsoli tak samo jak w pliku t.j kilka liczb, pozniej jesli w pliku są od nowej linijki kolejne liczby to tak samo aby wyświetlało tutaj.
            }
            
            // i tutaj chciałbym wyświetlić wszystkie elementy tablicy i nie wiem czy musze to robić jako oddzielną klasę i dopiero tutaj wyświetlić czy inaczej
            Console.WriteLine();
            Console.ReadLine();
        }
    }
}

dodanie znacznika <code class="csharp"> - Furious Programming

1

W miejsce gdzie zamiast liczby napotka string nie wstawi nic, więc ten tego.

using System;
using System.IO;
using System.Collections.Generic;
 
namespace Example
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(@"Podaj ścieżkę do pliku txt np. D:\liczby.txt"); //bo potrzebna @ przed ciągiem zawierającym '\'
            string path = Console.ReadLine();
            List<List<int>> numbersList = new List<List<int>>();// inicjalizacja listy list typu int

            while(!File.Exists(path))//sprawdz czy plik istnieje, jesli nie, pobierz sciezke jeszcze raz
            {
                Console.WriteLine("Zla sciezka pliku, podaj wlasciwa sciezke!");
                path = Console.ReadLine();   
            }

            using(StreamReader SR = new StreamReader(path))//uzywajac StreamReader, z tego co mi wiadomo jest to wlasciwa metoda uzywania obiektow z Disposable()
            {
                string line;
                while ((line = SR.ReadLine()) != null)//czytaj linie z pliku, dopoki taka istnieje
                {
                    string[] splitString = line.Split(' ');                    
                    List<int> singleIntList = new List<int>();//nowa lista intow

                    foreach (string item in splitString)//dla kazdego ciagu w splitach
                    {
                        try//sprobuj sparsowac i dodac item
                        {
                            singleIntList.Add(int.Parse(item));
                        }
                        catch//jesli nie mozna, przechwyc wyjatek i wykonaj
                        {
                            Console.WriteLine("Wartosc nie liczbowa: " + item);
                        }
                    }
                    numbersList.Add(singleIntList);// dodaj liste intow do listy list intow
                }
            }

            foreach (List<int> intList in numbersList)//dla kazdej listy w liscie
            {
                foreach (int number in intList)//dla kazdego numeru w liscie intow
                {
                    Console.Write(number + " ");
                }
                Console.WriteLine();
            }
            Console.ReadLine();
        }
    }
} 
1

@kamciono5:

W stringach możesz używać takich cudów jak \n - znasz to, bo sam stosowałeś. Oprócz tego \n (nowa linia) jest jeszcze dużo innych takich znaków kontrolnych - nie jest to jednolite chyba między językami, niejednolite jest też pewnie zachowanie na błędnie wprowadzone znaki. Zauważ też zmienione kolorowanie na forum. ---> D:\liczby
W każdym razie:
"D:\nowy" - to dawałoby:

D:
owy

A co, jak chcemy tam po prostu wstawić?
D:\nowy

Ano po prostu KAŻDY backslash musisz poprzedzić drugim backslashem - tzw. escape'owanie. D:\\nowy
Albo jak podał @ulong88 - w C# możesz wstawić znaczek @ przed string, ale wtedy pozbędziesz się zdaje (sam nie wiem) całkowicie możliwości wstawiania tych specjalnych znaków jak znak nowej linii.

Takie coś powinieneś znaleźć na początkach kursów z nauką języka - coś chyba pominąłeś pewien rozdział, "bo za łatwe"?

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