NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Martin Svoboda:16.1.2016 18:37

Č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.1.2016 18:37
Avatar
jt.e
Člen
Avatar
Odpovídá na Martin Svoboda
jt.e:16.1.2016 22:34

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.1.2016 22:34
Avatar
jt.e
Člen
Avatar
Odpovídá na Martin Svoboda
jt.e:16.1.2016 22:52

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.1.2016 22:52
Avatar
jt.e
Člen
Avatar
jt.e:16.1.2016 22:58

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

Editováno 16.1.2016 22:59
 
Nahoru Odpovědět
16.1.2016 22:58
Avatar
Martin Svoboda:17.1.2016 9:38

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.1.2016 9:40
 
Nahoru Odpovědět
17.1.2016 9:38
Avatar
Martin Svoboda:17.1.2016 9:46

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.1.2016 9:47
 
Nahoru Odpovědět
17.1.2016 9:46
Avatar
jt.e
Člen
Avatar
Odpovídá na Martin Svoboda
jt.e:17.1.2016 11:05

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.1.2016 11:07
 
Nahoru Odpovědět
17.1.2016 11:05
Avatar
jt.e
Člen
Avatar
jt.e:17.1.2016 11:14

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.1.2016 11:16
 
Nahoru Odpovědět
17.1.2016 11:14
Avatar
Martin Svoboda:19.1.2016 8:16

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.1.2016 8:16
Avatar
Odpovídá na Martin Svoboda
Michal Štěpánek:19.1.2016 8:43

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.1.2016 8:45
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
19.1.2016 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:19.1.2016 9:54

no jasné .. som to prehliadol :)

 
Nahoru Odpovědět
19.1.2016 9:54
Avatar
Martin Svoboda:22.1.2016 10:59

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.1.2016 10:59
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Martin Svoboda
Petr Čech:23.1.2016 14:53

Rozřež to 2 mezerami místo 1

Nahoru Odpovědět
23.1.2016 14:53
the cake is a lie
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.