Dodawanie wartości do tablicy bez znajomości jej długości

0

witam
Mam do was pytanie mianowicie mam pewien problem(który zapewne dla was wyda sie banalny), gdyż chcę wczytać z pliku wszystkie linie i później sparsować je do tablicy dwuwymiarowej żeby każdy element z linii był przyporządkowany tak samo jak jest to w pliku txt.
Kod:

 class Program
    {
        static int i = 0;
        static void Main(string[] args)
        {

            string[] lines;
            lines = File.ReadAllLines(@"D:\linie.txt");
            int[,] tabArgs;
            string[] tmpArgs;
            foreach (string line in lines)
            {
                tmpArgs = line.Split();
                int j = 0;
                foreach (string element in tmpArgs)
                {
                    tabArgs[i, j] = int.Parse(element);
                    j++;
                }
                i++;
            }
            Console.ReadLine();
        }
    }

I właśnie pytanie mam takie że nie wiem ile będzie elementów z tablicy tabArgs a chcę je przypisać dopiero w drugiej pętli foreach i właśnie wyskakuje mi błąd use of unassigned local variable. Wiem że to błąd, że jest nieprzypisana zmienna ale właśnie w tym problem że dopiero tam chcę ją przypisać(mógłbym to zrobić na listy ale chciałbym tak)

0

Zanim użyjesz tablicy, musisz ją skonstruować za pomocą new podając jej rozmiar.
Jeśli rozmiaru z góry nie znasz to znaczy że tablica nie jest dla ciebie.

1

Problem w tym że musisz przydzielić pamięć dla tablicy a tego nie robisz.

 class Program
    {
        static void Main(string[] args)
        {
            string[] lines = File.ReadAllLines(@"D:\linie.txt");
            int[][] tabArgs = new int[lines.Length][];
            uint y=0;
            foreach (string line in lines)
            {
                string[] tmpArgs = line.Split();
                tabArgs[y] = new int[tmpArgs.Length];
                uint x=0;
                foreach (string element in tmpArgs)
                {
                    tabArgs[y][x] = int.Parse(element);
                    ++x;
                }
                ++y;
            }
            Console.ReadLine();
        }
    }

pisano z palca.

0

a czy moglibyście mi napisać jak najlepiej było by zapisać wartości typu int z tego pliku w takim samym układnie do tablicy dwuwymiarowej
_13th_Dragon niestety ten kod nie działą, gdyż

int[,] tabArgs = new int[lines.Length,]; 

wymaga obydwóch warości

a np.

 string[] tmpArgs;

tutaj też nie przyznałem miejsca a wszystko działa ok i nie wiem dlaczego?

0

Chrzani waść, ten kod się kompiluje: http://ideone.com/pTxbnY
W ten sposób: int[,] tabArgs możesz stworzyć tabele prostokątną, zaś w przypadku danych wczytanych z pliku każdy wiersz może mieć inną ilość kolumn, z kolei na to pozwala tylko: int[][] tabArgs

0

Po pierwsze jak masz taką pewność to czemu nie chcesz tablicy int[][] przecież masz pewność ...
Ale zawsze możesz przepisać:

 class Program
    {
        static void Main(string[] args)
        {
            string[] lines = File.ReadAllLines(@"D:\linie.txt");
            int[][] tabArgs = new int[lines.Length][];
            uint y=0,MinCol=0,MaxCol=0;
            foreach (string line in lines)
            {
                string[] tmpArgs = line.Split();
                tabArgs[y] = new int[tmpArgs.Length];
                uint x=0;
                foreach (string element in tmpArgs)
                {
                    tabArgs[y][x] = int.Parse(element);
                    ++x;
                }
                if(y<=0) MinCol=MaxCol=x;
                else if(MinCol>x) MinCol=x;
                else if(MaxCol<x) MaxCol=x;
                ++y;
            }
            if(MinCol!=MaxCol) Console.WriteLine("Guzik prawda, różne rozmiary kolumn");
            int[,] tab = new int[tabArgs.Length,MinCol];
            for(uint y=0;y<tabArgs.Length;++y) for(uint x=0;x<MinCol;++x) tab[y,x]=tabArgs[y][x];
            Console.ReadLine();
        }
    }

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