Odczytywanie z pliku, pół wiersza i ArrayList.

0

Mam plik Test.txt. Tutaj przykładowa zawartość:

jabłko,apple;
dom,house;
 

Teraz wczytuje plik do ArrayList, ale wczytuje się cały wiersz. Czy da się zrobić tak, aby słowo jabłko wczytywało się do ListaPL, a słowo apple do ListaAng, czyli tak jakby oddzielić to. Będę bardzo wdzięczny jeśli ktoś będzie mógł mi pomóc.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Collections;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            StreamReader objReader = new StreamReader("D:\\Test.txt");
            string sline = "";//zmienna do przechowywania pojedynczego wiersza
            ArrayList ListaPL = new ArrayList();
            ArrayList ListaAng = new ArrayList();

            //wczytywanie po jednym wierszu do ArrayList, czyli ListaPL
            while (sline != null)
            {
                sline = objReader.ReadLine();
                if (sline != null)
                {
                    ListaPL.Add(sline);
                }
            }

            foreach (string sOutput in ListaPL)
            {
                Console.WriteLine(sOutput);
            }
            Console.ReadLine();

        }
    }
}

 
1
  1. NIE używaj ArrayList, zamiast niej użyj List<string>.
  2. Odczytaj cały plik do tablicy string metodą File.ReadAllLines.
  3. Idź w pętli po każdym elemencie tej tablicy i zrób coś takiego;
string[] obaSlowa = elementTablicy[i].Split(',');
listaPolskich.Add(obaSlowa[0]);
listaAngielskich.Add(obaSlowa[1]);
0

Teraz wczytuje tą metodą plik, ale pojawia się jeszcze jakiś napis This is extra Text. I jeszcze jedno pytanie, tablica musi mieć określony z góry rozmiar, a ja nie wiem ile słów będzie w pliku.

 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Collections;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string path = @"D:\\Test.txt";
            List<string> listaPl = new List<string>();
            List<string> listaAng = new List<string>();
            
           
            // Open the file to read from.
            string[] readText = File.ReadAllLines(path, Encoding.UTF8);
            foreach (string s in readText)
            {
                Console.WriteLine(s);
            }
            Console.ReadLine();

 

        }
    }
}

0

Nie rozumiem, jaki napis się pojawia i gdzie?
I która tablica musi mieć z góry określony rozmiar? Metoda File.ReadAllLines odczyta cały plik jako tablicę stringów i ją zwróci, nie musisz nic określać wcześniej.

0

jest fajny typ Dictionary specjalnie do tego typu zastosowań. Będzie lepiej niż ArrayList.

0

Wielkie dzięki somekind. Heh zrozumiałem o co Ci chodziło. A ten tekst "This is extra text" był zapisany w pliku Test.txt i dlatego się pojawił:D.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Collections;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string path = @"D:\\Test.txt";
            List<string> listaPl = new List<string>();
            List<string> listaAng = new List<string>();


            // Open the file to read from.
            string[] readText = File.ReadAllLines(path, Encoding.UTF8);
            for(int i=0;i<readText.Length;i++)
            {
                string[] obaSlowa = readText[i].Split(',');
                listaPl.Add(obaSlowa[0]);
                listaAng.Add(obaSlowa[1]);
            }
            Console.WriteLine("Lista Polskich słów:\n");
            for (int i = 0; i < listaPl.Count; i++)
            {
                Console.WriteLine(listaPl[i]);
            }
            Console.WriteLine("\nLista Angielskich słów:\n");
            for (int i = 0; i < listaAng.Count; i++)
            {
                Console.WriteLine(listaAng[i]);
            }
            Console.ReadLine();

        }
    }
}

 

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