operacje na plikach w języku c#

0

Witam, mam pewien problem a mianowicie;

Mam plik tekstowy w którym są następujące dane:
1;Produkt1
2;Produkt2 itd.

pytanie jest następujące:
jak za pomocą streamreadera wczytać te wartosci tak aby to co jest przed średnikiem było w jednym textboxie a to co po średniku w drugim textboxie?

1
        try 
        {            
            using (StreamReader sr = new StreamReader("TestFile.txt")) 
            {
                string line;              
                while ((line = sr.ReadLine()) != null) 
                {
                    string[] words = line.Split(';');
                    textbox1.Text=words[0];
                    textbox2.Text=words[1];
                    //albo
                    richtextbox1.AppendText(words[0]);
                    richtextbox1.AppendText(words[1]);
                }
            }
        }
        catch (Exception e) 
        {
            
        }
0

Dzięki wielkie za pomoc:) Długo szukałem odpowiedzi na to pytanie i nie sądziłem że to az takie proste:)

Mógłbyś mi doradzić jak podobna sytuacja wyglądała by z bazą danych? tj to co jest przed średnikiem zapisane będzie do jednego rekordu a to co za bedzie do drugiego rekordu.
Oprócz tego mam pytanie czy jeśli miałbym w tym pliku taką strukture:

kod_produktu int ; produkt text
1; produkt1
2;produkt2 itd

czy jest taka możliwość żeby stworzyć tabele na podstawie pierwszej linijki w pliku a uzupełnić ją następnymi linijkami? Jeśli jest to możliwe to proszę o pomoc jak to zrobić
Bardzo dziękuję za zainteresowanie tematem.

0

Czy jeśli zrobie tak:
using (StreamReader sr = new StreamReader("TestFile.txt"))
{
string line;
if ((line = sr.ReadLine()) != null)
{
string[] words = line.Split(';');
connStart();
string zapis1 = @"Create table tabela1 ('"+words[0] '"+ words[1] +"') ;";
MySqlCommand cmd3 = new MySqlCommand(zapis1, conn);
cmd3.ExecuteNonQuery();

            }
        }

to powinno mi utworzyć tabele na podstawie danych z pierwszej linii pliku czy gdzieś robie błąd? proszę o pomoc

0

Brakuje przecinka w zapytaniu. Najlepiej zrób to za pomocą String.Format, unikniesz takich błędów:

string wzorzec = @"CREATE TABLE {0} ({1}, {2})";
string zapytanie = String.Format(wzorzec, "nazwa_tabeli", words[0], words[1]);
0

Niestety w programie mialem przecinek i problem pozostaje nadal. Czy jak mam taki format w pliku.txt że nazwa_zmiennej i typ są w jednym rekordzie w tablicy to stworzy tabele czy nie?

chodzi o to że za pomocą kodu który jest powyżej chce utworzyć tabele na podstawie danych z pliku. niestety tabela się nie tworzy ani jak za parametry wezme "words[0]" ani jak podstawie tam "textBox.Text". Gdy wpisałem parametry ręcznie to wszystko ładnie stworzyło i nie wiem gdzie robie błąd

0
Cristiano1989 napisał(a):

chodzi o to że za pomocą kodu który jest powyżej chce utworzyć tabele na podstawie danych z pliku. niestety tabela się nie tworzy ani jak za parametry wezme "words[0]" ani jak podstawie tam "textBox.Text". Gdy wpisałem parametry ręcznie to wszystko ładnie stworzyło i nie wiem gdzie robie błąd

To może warto sobie wyświetlić, albo podejrzeć utworzone zapytanie i sprawdzić poprawność? Jak nic nie zauważysz to przeklej je tutaj.

0

Struktura pliku:

KodTowaru int; NazwaTowaru text
1; Towar1
2; Towar2
3; Towar3

kod programu:

using (StreamReader sr = new StreamReader(textBox1.Text))
{
string line;
if ((line = sr.ReadLine()) != null)
{
string[] words = line.Split(';');
textBox3.Text = words[0];
textBox4.Text = words[1];

                    connStart();
                    string zapis1 = @"Create table `tabela1` ('"+ words[0] +"','"+ words[1] +"')";
                    MySqlCommand cmd3 = new MySqlCommand(zapis1, conn);
                    cmd3.CommandText = zapis1;
                    cmd3.ExecuteNonQuery();

                }

Gdy wpisze na sztywno wartości to wszystko utworzy ładnie a gdy chce wsadzić wartość z pliku to program przechodzi natomiast nie tworzy tabeli

1

A to mysql pozwala nie podawać typu kolumny? Dlaczego nazwy kolumn są w apostrofach?

0

no właśnie o to chodzi ze w pliku mam "KodProduktu int" czyli jest nazwa i typ. podstawiam całą zmienna z nazwą i z typem tak że myśle że to powinno działać. Możesz podać jakąś swoją propozycję rozwiązania tego problemu?

0

Jesteś Wielki:) To te apostrofy zrobiły swoje:)

0

mam nadzieje że już ostatnie pytanie mam ale kto pyta nie błądzi:)

mając strukture pliku:

KodTowaru int; NazwaTowaru text
1; Towar1
2; Towar2
3; Towar3

I strukturę tabeli

using (StreamReader sr = new StreamReader(textBox1.Text))
{
string line;
if ((line = sr.ReadLine()) != null)
{
string[] words = line.Split(';');
textBox3.Text = words[0];
textBox4.Text = words[1];

                    connStart();
                    string zapis1 = @"Create table tabela1 ('"+ words[0] +"','"+ words[1] +"')";
                    MySqlCommand cmd3 = new MySqlCommand(zapis1, conn);
                    cmd3.CommandText = zapis1;
                    cmd3.ExecuteNonQuery();

                }

Teraz żeby zapisywać dane z pliku do tabeli mam zamiar użyć pętli while. W jaki sposób mogę zrobić żeby Pętla while rozpoczynała się od drugiej linijki w pliku? tzn od 1;Towar1

0

Umieść tą pętle za tym ifem ale nadal w tym using. Powinno być ok, pod warunkiem, że za każdym razem tworzysz tabelę.

0

Tylko że nie chce właśnie tabeli tworzyć za każdym razem. tabela ma tworzyć się tylko raz i pozniej mają się do niej dopisać te dane

Moja pętla wygląda mniej wiecej tak:
while ((line = sr.ReadLine()) != null)
{
string[] words = line.Split(';');
textBox3.Text = words[3];
textBox4.Text = words[4];
connStart();
string zapis = @"INSERT INTO tabela(KodTowaru, NazwaTowaru) values('"+ words[0] +"','"+ words[1] +"');";
MySqlCommand cmd2 = new MySqlCommand(zapis, conn);
cmd2.CommandText = zapis;
cmd2.ExecuteNonQuery();
}

ona funkcjonowała dobrze przed dorobieniem tworzenia tabeli a teraz nie wiem jak ja zmodyfikować żeby ona działała razem z tworzeniem tabeli

0

Pokazałem ci jak sklecić poprawne zapytanie, a ty dalej brniesz w złą stronę.

  1. Pobierasz pierwszą linie i na jej podstawie tworzysz tabele
  2. W pętli pobierasz pozostałe linie i na ich podstawie wstawiasz dane do tabeli

Użyj String.Format !

0

Już poradziłem sobie po swojemu:) Dziękuję wszystkim za pomoc:)

0

@Cristiano1989, jaki jest sens oznaczyć wątek jako rozwiązany, a potem pytać w nim dalej?

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