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

Klasa konwerująca znaki na inne znaki

Object Storage Arubacloud
0 głosów
98 wizyt
pytanie zadane 20 lutego 2019 w C# przez Shimeo7 Obywatel (1,910 p.)

Cześć, zrobiłem klasę, której zadaniem jest odczytanie z pliku jakiegoś zdania (Example.txt), a następnie zastąpienie danego znaku z Example.txt znakiem ze słownika. Jeżeli tego nie tworze w klasie to wszystko działa jak należy, ale po zrobieniu mechanizmu konwertującego w klasie nie działa i nie za bardzo wiem czemu. Czy ktoś jest w stanie mi to wyjaśnić? Pliki słownika(t01t.txt) i Example.txt wrzuciłem do folderu Debug (ConsoleApp1 -> ConsoleApp1 -> bin -> Debug). Poniżej zamieszczam plik klasy 

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

namespace ConsoleApp2
{
    class Convert
    {
        Dictionary<int, int> charToBr = new Dictionary<int, int>();

        string line;
        string convertedText = "";
        bool findSignCharToBr;
        int br;

        public void Translate()
        {
            System.IO.StreamReader file = new System.IO.StreamReader(@"t01t.txt");
            while ((line = file.ReadLine()) != null)
            {
                char[] c = new char[1];
                c[0] = ' ';
                string[] s = line.Split(c);

                if (s.Length > 2)
                {
                    int v1 = int.Parse(s[0], System.Globalization.NumberStyles.HexNumber);
                    int v2 = int.Parse(s[0], System.Globalization.NumberStyles.HexNumber);
                    charToBr.Add(v1, v2);
                }
            }
            file.Close();

            file = new System.IO.StreamReader(@"Example.txt");
            while ((line = file.ReadLine()) != null)
            {
                for (int i = 0; i < line.Length; i++)
                {
                    int x = (int)line[i];
                    findSignCharToBr = charToBr.TryGetValue(x, out br);
                    if (!findSignCharToBr)
                    {
                        Console.WriteLine("Something wrong");
                        break;
                    }
                    else
                    {
                        string hexValue_charToBr = br.ToString("X2");
                        convertedText += hexValue_charToBr + " ";
                    }
                }
            }
            file.Close();
            Console.WriteLine(convertedText);
        }
    }
}

oraz kod metody statycznej

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

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            Convert convertChartoBr = new Convert();
            convertChartoBr.Translate();
            Console.ReadKey();
        }
    }
}

 

komentarz 20 lutego 2019 przez adrian17 Ekspert (344,860 p.)
Musisz jeszcze zdefiniować "nie działa".

2 odpowiedzi

0 głosów
odpowiedź 20 lutego 2019 przez Shimeo7 Obywatel (1,910 p.)

Racja, kompilator nie zgłasza błędów, ale jak uruchomię program to wyświetla się something wrong, sprawdziłem więc dalej i chciałem zobaczyć, czy dodaje poszczególne znaki do słownika z "t01t.txt" i chyba nie dodaje, bo nic widać w konsoli(dodałem instrukcje, żeby wyświetlało co dodaje), więc mniej więcej wiem gdzie robię błąd, tylko nie wiem czemu i jak go naprawić.

0 głosów
odpowiedź 20 lutego 2019 przez adrian17 Ekspert (344,860 p.)

Na moje oko to ten blok wygląda dziwnie i podejrzanie.

            {
                char[] c = new char[1];
                c[0] = ' ';
                string[] s = line.Split(c);
 
                if (s.Length > 2)
                {
                    int v1 = int.Parse(s[0], System.Globalization.NumberStyles.HexNumber);
                    int v2 = int.Parse(s[0], System.Globalization.NumberStyles.HexNumber);
                    charToBr.Add(v1, v2);
                }
            }

Sugeruję go przeanalizować i/lub odpalić w debuggerze.

(btw, jeśli chcesz po prostu dzielić string po spacjach, to line.Split(null) powinno wystarczyć.)

komentarz 20 lutego 2019 przez Shimeo7 Obywatel (1,910 p.)
Jasny gwint :O ale fatalny błąd. Widzę, poprawione i działa.

Podobne pytania

+1 głos
1 odpowiedź 1,046 wizyt
pytanie zadane 15 czerwca 2015 w C# przez Kozerski Igor Użytkownik (610 p.)
+1 głos
1 odpowiedź 459 wizyt
pytanie zadane 21 grudnia 2022 w PHP przez zbiku25 Bywalec (2,940 p.)
0 głosów
0 odpowiedzi 172 wizyt
pytanie zadane 26 lutego 2019 w C# przez Łukasz Kosicki Początkujący (270 p.)

92,554 zapytań

141,399 odpowiedzi

319,535 komentarzy

61,938 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

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!

...