• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C# Odczyt wartości ze Stringa

Object Storage Arubacloud
0 głosów
293 wizyt
pytanie zadane 20 lutego 2023 w C# przez marek.nowak404 Nowicjusz (220 p.)

Witam, zmagam się z mała barierą, szukałem już na yt i forach odpowiedzi ale jej nie dostałem. Chciałbym się dowiedzieć jak najprościej odczytać z łańcucha stringa gdzie każde słowo/wartość ma na końcu ";". Na chwilę obecna mam coś takiego :

MySqlDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    
                    Data.Text += $"{reader.GetString("animals_name")};";

                }

i zwraca cos takiego:

->  Cat;Dog;Duck;Spider;Pigeon;Rat;Fish;

Jak wyodrębnić słowa z takiego ciągu ? funkcja foreach i Substring tu nie zadziała.

 

2 odpowiedzi

0 głosów
odpowiedź 20 lutego 2023 przez VBService Ekspert (254,570 p.)
wybrane 21 lutego 2023 przez marek.nowak404
 
Najlepsza

Ten zapis

Data.Text += $"{reader.GetString("animals_name")};";

powoduje, że masz zwrócony ciąg (w tym przypadku do Data.Text)

Cat;Dog;Duck;Spider;Pigeon;Rat;Fish;

przy każdej iteracji w pętli while 

reader.GetString("animals_name")

zawiera jedną wartość z pola "animals_name" plus znak ; (średnik)

zapis += łączy kolejne wartości

1 iteracja Data.Text += Cat;
2 iteracja Data.Text += Cat;Dog;
3 iteracja Data.Text += Cat;Dog;Duck;
4 iteracja Data.Text += Cat;Dog;Duck;Spider;  itd.

 

jeżeli

... ciąg nazw zwierzaków, który może ulec zmianie

to nie możesz w prosty sposób użyć nazw zmiennych w stylu

string pierwszy_zwierzak = animal_name1;

string drugi_zwierzak = animal_name2;

w tym przypadku możesz posłużyć się tablicą lub listą np.

using System.Collections.Generic;


...
List<string> animal_name = new List<string>();

 

wtedy np.

List<string> animal_name  = new List<string>();
MySqlDataReader reader = command.ExecuteReader();
 
while (reader.Read())
{
   animal_name.Add(reader.GetString("animals_name"));
}

animal_name[0]; // animal_name1;
animal_name[1]; // animal_name2;

 

można też posłużyć się Dictionary

using System.Collections.Generic;


...
Dictionary<string, string> dict = new Dictionary<string, string>();

wtedy np.

Dictionary<string, string> animal_name = new Dictionary<string, string>();
MySqlDataReader reader = command.ExecuteReader();
 
while (reader.Read())
{
   animal_name.Add(reader.GetString("animals_name"), reader.GetString("animals_name"));
   // lub np.
   // animal_name.Add(reader.GetString("animal_name"), reader.GetString("animal_description"));
}

// Cat;Dog ...
animal_name["Cat"]; // animal_name1;
animal_name["Dog"]; // animal_name2;

...

string key = "Dog";

if (animal_name.TryGetValue(key, out value))
{
    Console.WriteLine("{0} = {1}", key, value);
}

...

string key = "Dog";

if (animal_name.ContainsKey(key))
{
    Console.WriteLine("{0} = {1}", key, animal_name[key]);
}

 

komentarz 20 lutego 2023 przez marek.nowak404 Nowicjusz (220 p.)
Dzięki ! Przetestuje niedługo i dam znać jak działa :)
komentarz 21 lutego 2023 przez marek.nowak404 Nowicjusz (220 p.)

@VBService, Działa! dzięki za pomoc. Oczywiście zwierzaki to przykład. Ogólnie chodzi o połączenie się z bazą danych i operowanie na tych danych

0 głosów
odpowiedź 20 lutego 2023 przez tangarr Mędrzec (154,860 p.)

Użyj funkcji Split

String data = "Cat;Dog;Duck;Spider;Pigeon;Rat;Fish;";
char[] charSeparators = new char[] { ';' };
var words = data.Split(charSeparators, StringSplitOptions.RemoveEmptyEntries);
foreach (var w in words) {
    System.Console.WriteLine(w);
}

 

komentarz 20 lutego 2023 przez marek.nowak404 Nowicjusz (220 p.)
Dokładniej chodzi mi o to że te dane mogą się zmienić, chodzi o to żeby każdą zmienną po kolei przypisać do zmiennej string. Mam ciąg nazw zwierzaków, który może ulec zmianie. Była jedna funkcja która pozwalała wyciągnąć znak ze stringu lub znak od - do, ale w tym wypadku długość słów może być różna :/ punktem odniesienia jest tylko ten średnik.

Twój kod wydaje mi się że zwraca po kolei podzielone już słowa
komentarz 20 lutego 2023 przez tangarr Mędrzec (154,860 p.)
Nie rozumiem.
Chcesz stworzyć napis w stylu "Cat;Dog;Duck;Spider;Pigeon;Rat;Fish;" czy wyciągnąć z niego poszczególne słowa?
komentarz 20 lutego 2023 przez marek.nowak404 Nowicjusz (220 p.)
edycja 20 lutego 2023 przez marek.nowak404
Wyciągnąć słowa np

string pierwszy_zwierzak = animal_name1;

string drugi_zwierzak = animal_name2;

itd.
komentarz 20 lutego 2023 przez tangarr Mędrzec (154,860 p.)

Jeżeli wiesz ile słów masz wyciągnąć to zamiast wyświetlać je w pętli przypisujesz wartości do konkretnych zmiennych

String data = "Cat;Dog;Duck;Spider;Pigeon;Rat;Fish;";
char[] charSeparators = new char[] { ';' };
var words = data.Split(charSeparators, StringSplitOptions.RemoveEmptyEntries);
String pierwszy_zwierzak = words[0];
String drugi_zwierzak = words[1];

 

Podobne pytania

0 głosów
0 odpowiedzi 162 wizyt
pytanie zadane 5 października 2020 w C# przez troian1337 Użytkownik (720 p.)
0 głosów
1 odpowiedź 138 wizyt
pytanie zadane 6 kwietnia 2021 w C i C++ przez 0Brzoza0 Nowicjusz (120 p.)
+1 głos
2 odpowiedzi 438 wizyt
pytanie zadane 21 października 2021 w C# przez Kamirru9 Początkujący (300 p.)

92,687 zapytań

141,598 odpowiedzi

320,087 komentarzy

62,047 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...