Pomoc w skrypcie C#

0

Witam,

Mam pętle, która wypisuje kody w postaci stringa, są to kody typu: 001, 002, 003
Każdy kod to symbol towaru. Potrzebuję połączyć te kody ze swoimi nazwami.

001-kabel, 002-telefon, 003-bateria itd itd

		while(DBReader .Read())
		{
			a = a + DBReader["it_Symbol"].ToString();			
		}
		DBReader.Close();

Najlepiej by było gdyby skrypt pobierał informację o nazwie z jakiegoś pliku tekstowego, aby można było łatwo dodać nowy kod oraz powiązaną z nim nazwę.

Na wyjściu chciałbym aby wypisywało same zdefiniowane przeze mnie nazwy.

Czy możecie mi jakoś pomóc?

Pozdrawiam,
Rafał

0

Baza danych?

0

Tak,
symbole wyciągane są z bazy danych.

Kod C# jest w projektancie wydruków, będzie miał na celu wypisywanie zdefiniowanych nazw na wydruk.

0

Ale w czym masz problem?
Nie umiesz się z DB połączyć, nie umiesz pliku otworzyć? O co Ci konkretnie chodzi?
Jeśli chcesz połączyć nazwę z inną nazwą, to są to dwa stringi:

string pozycja=string.empty;
string towar="telefon";
string kod="123";
pozycja = kod+" - "+towar;
0

Ale w czym masz problem?
Nie umiesz się z DB połączyć, nie umiesz pliku otworzyć? O co Ci konkretnie chodzi?
Jeśli chcesz połączyć nazwę z inną nazwą, to są to dwa stringi:

Z bazą się łącze, pętla przypisuje stringi do zmiennej a w postaci 001002003

Teraz tak jak tłumaczyłem wcześniej, chcę aby w kolejnej zmiennej było zamiast symboli, nazwy towarów: kabeltelefonbateria

Nie wiem jak połączyć te obie rzeczy. Nie wiem jakie symbole pojawią się w pętli dlatego wcześniej musiałbym zdefiniować wszystkie symbole oraz nazwy im przyporządkowane.

0

Skoro to baza danych, to chyba powina być w niej jakaś tabela która opisuje konkretne id tzn nazwę odpowiadającą danemu id i jakies inne dane. Zrób joina takich tabel i dopiero wtedy pobierz dane z bazy.

0
gawcio90 napisał(a):

Ale w czym masz problem?
Nie umiesz się z DB połączyć, nie umiesz pliku otworzyć? O co Ci konkretnie chodzi?
Jeśli chcesz połączyć nazwę z inną nazwą, to są to dwa stringi:

Z bazą się łącze, pętla przypisuje stringi do zmiennej a w postaci 001002003

Teraz tak jak tłumaczyłem wcześniej, chcę aby w kolejnej zmiennej było zamiast symboli, nazwy towarów: kabeltelefonbateria

Nie wiem jak połączyć te obie rzeczy. Nie wiem jakie symbole pojawią się w pętli dlatego wcześniej musiałbym zdefiniować wszystkie symbole oraz nazwy im przyporządkowane.

skoro nie wiesz jakie symbole, to skąd ja mam wiedzieć jak je połączyć?? co za absurd jakiś.
podaj definicje tych symboli, o co z nimi chodzi? Bo ja dalej tego totalnie nie rozumiem

jeśli 001, 002 i 003 to symbole, to czemu one są w jednej zmiennej a nie liście?, tak samo jak te symbole, dlaczego to jest wszystko razem połączone a nie oddzielnie?

0

Nie mogę wyciągnąć z bazy danych nazwy towaru przypisanego do do danego symbolu. Uznajmy że jest to niemożliwe.

Kod w C# ma się tym zająć.
Załóżmy, że na początku definiuję, że symbol 001 to telefon, 002 to bateria, a 003 to kabel

Teraz jest pętla, która w zależności co się w przesyłce znajduje będzie miała symbole np 001 oraz 002.

Chcę aby te symbole powiązać z nazwami przeze mnie zdefiniowanymi.
Funkcja, która będzie działała w pętli i jeżeli w zmiennej a pojawi się kod 001 to zapisze do zmiennej b telefon, po kolejnym przejściu pętli w zmiennej a będzie kod 002 to do zmiennej b dopisze bateria.

0
var produkty = new Dictionary<string, string>();
while(DBReader.Read()
{
switch(DBReader["it_Symbol"].ToString())
{
case "001":
              produkty.Add(DBReader["it_Symbol"].ToString(), "telefon");
              break;
case "002":
               produkty.Add(DBReader["it_Symbol"].ToString(), "kabel");
              break;
}

}
0
gawcio90 napisał(a):

Chcę aby te symbole powiązać z nazwami przeze mnie zdefiniowanymi.
Funkcja, która będzie działała w pętli i jeżeli w zmiennej a pojawi się kod 001 to zapisze do zmiennej b telefon, po kolejnym przejściu pętli w zmiennej a będzie kod 002 to do zmiennej b dopisze bateria.

Nie wiem czy dobrze zrozumiałem, ale może warto spróbować zrobić to tak:

 
class Test
    {
       
        private Dictionary<string, string> productDict = new Dictionary<string, string>();
        private string teststring = "001002003";
       
        public Test()
        {
            productDict.Add("001", "kabel");
            productDict.Add("002", "telefon");
            productDict.Add("003", "bateria");

            var xx = SplitString(teststring);
            
            string outputString = "";

            foreach (var z in SplitString(teststring))
                outputString += productDict[z];

            Console.WriteLine(outputString);
            
        }
        
        public IEnumerable<string> SplitString(string instring)
        {
           List<string> returnColl = new List<string>();
           
            if (instring.Length % 3 != 0) return null;

            for (int i = 0; i < instring.Length; i = i + 3)
                returnColl.Add(instring.Substring(i, 3));
     
             return returnColl;
        }
        
    }

Oczywiście 'productDict.Add(TKey, TValue)' dodawane wg bazy danych.

0

No to stwórz sobie zykły plik tekstowy albo jakiegoś XMLa w którym będą te kody. Wczytaj do słownika z tego pliku pary symbol-nazwa towaru i w tej pętli co wczytujesz kody z bazy wybieraj z tego słownika odpowiadające kodom nazwy i połącz je jako string z kodem.

//EDIT: kolega powyżej mnie wyprzedził.

0

Dzięki za pokazanie możliwości.

Jak już zrozumiałeś co mam na myśli, to jeszcze pytanie czy jest możliwość aby zrobić to na podstawie pliku tekstowego, gdzie przechowywałbym owe powiązania.

Sprawa wygląda tak, że kod ten będzie w kilku rodzajach wydruków i przy konieczności dodania jakiegoś towaru, trzeba będzie zmieniać to w każdym miejscu.

Gdyby była możliwość zdefiniowania tego w jakimś pliku, który później byłby dołączany, to znacznie ułatwiło by to różnego rodzaju modyfikacje.

0

Tak jak napisał @W2K zrób sobie plik XML w którym będziesz miał to wszystko :) i czytaj plik XML.

0

Właśnie o coś takiego mi chodziło. Dzięki!

0

Widzę, że już są odpowiedzi.

Spróbuj coś takiego:

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

namespace ConsoleApplication22
{
    class Program
    {
        static void Main(string[] args)
        {
            Test ts = new Test();
            Console.ReadKey();
        }
    }
    class Test
    {
       
        private Dictionary<string, string> productDict = new Dictionary<string, string>();
        private string teststring = "001002003";
       
        public Test()
        {

            LoadFile();
                   
            string outputString = "";

            foreach (var z in SplitString(teststring))
                outputString += productDict[z];

            Console.WriteLine(outputString);
            
        }
        
        public IEnumerable<string> SplitString(string instring)
        {
           List<string> returnColl = new List<string>();
           
            if (instring.Length % 3 != 0) return null;

            for (int i = 0; i < instring.Length; i = i + 3)
                returnColl.Add(instring.Substring(i, 3));
     
             return returnColl;
        }
        public void LoadFile()
        {
            using (StreamReader sr = new System.IO.StreamReader(@"E:\testbaza.txt"))
            {
                while (!sr.EndOfStream)
                {
                    string fileLine = sr.ReadLine();
                    var z = fileLine.Split(';');
                    productDict.Add(z[0], z[1]);

                }
            }
        }
        
    }
}
 

plik testbaza.txt ma postać:

 001;kabel
002;telefon
003;bateria

Oczywiście powyższy kod jest bardzo dziurawy - traktuj go jako zarys.

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