Diskuze: TXT súbor do mysql

C# .NET .NET (C# a Visual Basic) TXT súbor do mysql American English version English version

Avatar
Martin Svoboda:

Čaute, potreboval by som načítať txt súbor do poľa a potom to zapísať do mysql. So zápisom do mysql problém nebude, no neviem ako prečítať txt (ešte som to nikdy nerobil).

dáta v txt vyzerajú zhruba takto:

riadok11 riadok12 riadok13
riadok21 riadok22 riadok23
riadok31 riadok32 riadok33

položky nie sú rozdelené žiadnymi rozdeľovačmi (čiarky, bodky, atď.) medzi reťazcami je viac ako jedna medzera.
Dá sa takýto texťák načítať do poľa a potom vložiť do databázy??

 
Odpovědět 16. ledna 18:37
Avatar
jt.e
Člen
Avatar
Odpovídá na Martin Svoboda
jt.e:

Pro separaci sloupců použij Split:

string[] delim = new string[] { "  " }; //jako oddělovač použij dvě mezery
string[] sloupce = str.Split(delim, StringSplitOptions.None); //pak odřízni okrajové mezery pomocí .Trim
 
Nahoru Odpovědět 16. ledna 22:34
Avatar
jt.e
Člen
Avatar
Odpovídá na Martin Svoboda
jt.e:

Soubor můžeš načíst třeba takto:

private void LoadItems(string filename)
{
    List<string> lst = new List<string>();

    try
    {
        using (StreamReader r = new StreamReader(filename, Encoding.Default, true))
        {
            string line;
            while ((line = r.ReadLine()) != null)
            {
                lst.Add(line);
            }
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "Chyba", MessageBoxButtons.OK, MessageBoxIcon.Error);
        return;
    }
  // tady pak zpracovat jednotlivé řadky (lst), jak jsem uvedl výš
  //potom ty položky naházet do databáze už musíš podle toho, kam co chceš
}

ps, zdroják jsem netestoval... doufám, že je funkční

 
Nahoru Odpovědět 16. ledna 22:52
Avatar
jt.e
Člen
Avatar
jt.e:

možná použij místo StringSplitOp­tions.None StringSplitOp­tions.RemoveEm­ptyEntries

Editováno 16. ledna 22:59
 
Nahoru Odpovědět 16. ledna 22:58
Avatar
Martin Svoboda:

zatiaľ som to skúšal takto:

var lines = System.IO.File.ReadAllLines(@"D:\test.txt");
var data = new List<List<string>>();
foreach (var line in lines)
{
    var split = line.Split(new[]{' ', '\t'}, StringSplitOptions.RemoveEmptyEntries);
    data.Add(split.ToList());
}

ale neviem ako si viem z listu vybrať hodnoty po slĺpcoch ... v podstate v txt mám 3 riadky a 3 stĺpce a potrebujem ich narvať do databázy tak isto ako v sú v txt
viem to urobiť cez string?

string[][] table = data.Select(a => a.ToArray()).ToArray();
Editováno 17. ledna 9:40
 
Nahoru Odpovědět 17. ledna 9:38
Avatar
Martin Svoboda:

prípadne ak použijem Linq (podľa msdn) tak:

var prvy_stlpec = data.Select(line => line.First())
var druhy_stlpec = data.Select(line => line[1]);
var treti_stlpec = data.Select(line => line[2]);

ale aj tak mi nie je jasné ako si viem vybrať určitý stĺpec
Ale asi naj voľba to bude cez 2D pole takže:

string[][] table = data.Select(a => a.ToArray()).ToArray();
Editováno 17. ledna 9:47
 
Nahoru Odpovědět 17. ledna 9:46
Avatar
jt.e
Člen
Avatar
Odpovídá na Martin Svoboda
jt.e:

moc nechápu, s čím si nedokážeš poradit

var lines = System.IO.File.ReadAllLines(@"D:\test.txt");
var data = new List<List<string>>();
foreach (var line in lines)
{
    var split = line.Split(new[]{' ', '\t'}, StringSplitOptions.RemoveEmptyEntries);
    data.AddRange(split);//teď máš v data sloupce jednoho z řádků

    //tady proveď import do DB
    ImportujDoDbJakoNeco(data[0]);
    ImportujDoDbJakoNecoJineho(data[1]);
    ImportujDoDbJakoNecoUplneJineho(data[2]);

    data.Clear(); // tady vymažeš list, abys ho mohl znovu naplnit
}
Editováno 17. ledna 11:07
 
Nahoru Odpovědět 17. ledna 11:05
Avatar
jt.e
Člen
Avatar
jt.e:

Teď jsem si všiml, že tam máš:
var data = new List<List<strin­g>>();
dej místo toho
var data = new List<string>();

Editováno 17. ledna 11:16
 
Nahoru Odpovědět 17. ledna 11:14
Avatar
Martin Svoboda:

tak mám to niejako takto:

string a;
      string b;
      string c;
      private void button1_Click(object sender, EventArgs e)
      {


          var lines = System.IO.File.ReadAllLines(@"D:\test.txt");
          var data = new List<string>();
          foreach (var line in lines)
          {
              var split = line.Split(new[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries);
              data.AddRange(split);
              a = data[0].ToString();
              b = data[1].ToString();
              c = data[2].ToString();

              data.Clear();
          }
          string constring = "Server=***;Database=OitDB;Uid=martin;Pwd=***;";
          string Query = "INSERT INTO OitDB.plp(a,b,c)VALUES(@a,@b,@c)";
          MySqlConnection conDatabase = new MySqlConnection(constring);
          MySqlCommand cmdDatabase = new MySqlCommand(Query, conDatabase);
          cmdDatabase.Parameters.AddWithValue("@a", a);
          cmdDatabase.Parameters.AddWithValue("@b", b);
          cmdDatabase.Parameters.AddWithValue("@c", c);


          MySqlDataReader myReader;

          try
          {
              conDatabase.Open();
              myReader = cmdDatabase.ExecuteReader();
              MessageBox.Show("zapisane");

              while (myReader.Read())
              {

              }

          }
          catch (Exception ex)
          {
              MessageBox.Show(ex.Message);

          }
      }
  }

urobil som si skušobný súbor test.txt
ale teraz mi zapisuje len posledný riadok, takže v tomto prípade a b c
Podľa tvojho postupu si zapíšem "hodnoty" do data a potom vykonám data.Clear(), takže musím použiť dajaký repeater?

 
Nahoru Odpovědět 19. ledna 8:16
Avatar
Odpovídá na Martin Svoboda
Michal Štěpánek:

Musíš to ukládání dát do toho cyklu procházení, protože takto si vždycky projdeš řádky, ale uložení dáš až na poslední řádek

string a;
      string b;
      string c;
      private void button1_Click(object sender, EventArgs e)
      {


          var lines = System.IO.File.ReadAllLines(@"D:\test.txt");
          var data = new List<string>();
          foreach (var line in lines)
          {
              var split = line.Split(new[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries);
              data.AddRange(split);
              a = data[0].ToString();
              b = data[1].ToString();
              c = data[2].ToString();

              data.Clear();

          string constring = "Server=***;Database=OitDB;Uid=martin;Pwd=***;";
          string Query = "INSERT INTO OitDB.plp(a,b,c)VALUES(@a,@b,@c)";
          MySqlConnection conDatabase = new MySqlConnection(constring);
          MySqlCommand cmdDatabase = new MySqlCommand(Query, conDatabase);
          cmdDatabase.Parameters.AddWithValue("@a", a);
          cmdDatabase.Parameters.AddWithValue("@b", b);
          cmdDatabase.Parameters.AddWithValue("@c", c);


          MySqlDataReader myReader;

          try
          {
              conDatabase.Open();
              myReader = cmdDatabase.ExecuteReader();
              MessageBox.Show("zapisane");

              while (myReader.Read())
              {

              }

          }
          catch (Exception ex)
          {
              MessageBox.Show(ex.Message);

          }
          }
      }
  }
Editováno 19. ledna 8:45
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 19. ledna 8:43
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Martin Svoboda:

no jasné .. som to prehliadol :)

 
Nahoru Odpovědět 19. ledna 9:54
Avatar
Martin Svoboda:

mám ešte problém, pretože mám aj slová s medzerou, takže mi ich rozdeľuje do ďalšieho stĺpca

 
Nahoru Odpovědět 22. ledna 10:59
Avatar
Nahoru Odpovědět 23. ledna 14:53
Why so serious? -Joker
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 13 zpráv z 13.