C# - Problemi i rješenja izdvojena tema

poruka: 2.138
|
čitano: 858.708
|
moderatori: XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
18 godina
offline
Re: C# - Problemi i rješenja
F.R.C. kaže...
andrijam kaže...

U ovom kodu po meni ne postoji ništa vrijedno komentiranja, al da pojasnim (s > 64 && s < 91) u ASCII tablici provjeri da li je veliko slovo, ako je onda mu postavi 6 bit na 1 (char)(s | (char)96)  96  je binarno 01100000. I tako se prebaci u mala slova, jer su u malim slovima  6 i 7 bit su uvjek 1, pa sam mogao sam koristiti i 32 (dec) 00100000 (bin), izmjena 6tog bita u 1 bila bi dovoljna za konvertirati u malo slovo. Ovako izgleda binarna ascii tablica https://racunarskapismenost.files.wordpress.com/2014/09/kod-3-e1410715398755.png.

 

Ovaj kod neće raditi ispravno za UNICODE znakove!

 

Ipak je objasnjenje poprilicno dugacko. A zbog uvodne izjave sam bio slobodan negativno ocijeniti poruku/odgovor. ;-)

 

Lambda-Expressions jesu vrlo popularni medju mladjim programerima i izgledaju "cool", ali odrzavanje aplikacije napisane na takav nacin poslije dvije ili tri godine, kad treba nesto dogradit ili nadgradit postaje prava nocna mora. Narocito znaju biti problematicne gnijezdene petlje, koje su u lambdama nekako sakrivene a mogu imati velik utjecaj na brzinu izvodjenja. Ako pravite aplikacije, koje ce imati duzi rok trajanja (neke moje aplikacije su u uporabi vec tamo, od 2003 i .NET 1.1), izbjegavajte necitljive konstrukte i kometrar neka uvijek opisuje zeljenu operaciju. U tvom slucaju npr.:

 

Za pretvorbu velikih slova (64..91) u mala ako je u pitanji ASCII tabela, dovoljno je podesiti sesti bita na 1 

 

Iz neceg takvog (ispricavam se na slabijem znanju jezika) moze netko i poslije par godina skuziti, koju je namjeru programer imao, kad je pisao kod. U tom duhu je mnogo put bolja uporaba dobrih starih (verbose) konstrukta, ako gledam iz izkustva i prakse. 

 Pa dobro, da je stavio objašnjenje u kod vjerojatno bi samo napisao pretvaranje velikih slova u mala, ovako je malo dulje objasnio kod na tvoj zahtjev.

 

Kako god, koristio bitwise OR operator, na int vrijednost chara dodao 32 ili charu dodao char razmak rezultat je isti, onom tko kuži dovoljna je opaska što kod radi, a takvi valjda i pišu aplikacije. On nije stavio komentar jer svi unaprijed znaju što kod radi.

 

Što se tiče tvoje opaske na lambdu, vjerojatno si u pravu, ali za ove jednostavne stvari bi mogla proći.

Poruka je uređivana zadnji put uto 30.10.2018 16:13 (Floki).
16 godina
offline
C# - Problemi i rješenja

Ja ne kuzim sto ne valja s lambdama...

U kombinaciji s linq su intuitivne

Poruka je uređivana zadnji put čet 1.11.2018 17:09 (CroNk3r).
Moj PC  
1 0 hvala 0
17 godina
offline
Re: C# - Problemi i rješenja

To sam i ja mislio napisati, ali pošto je tema malo živnula nisam htio skretati s teme kakva god ona bila. 

Dvije su stvari beskonačne - svemir i ljudska glupost. Za svemir nisam siguran - Einstein
17 godina
offline
Re: C# - Problemi i rješenja
F.R.C. kaže...

Lambda-Expressions jesu vrlo popularni medju mladjim programerima i izgledaju "cool", ali odrzavanje aplikacije napisane na takav nacin poslije dvije ili tri godine, kad treba nesto dogradit ili nadgradit postaje prava nocna mora. Narocito znaju biti problematicne gnijezdene petlje, koje su u lambdama nekako sakrivene a mogu imati velik utjecaj na brzinu izvodjenja. Ako pravite aplikacije, koje ce imati duzi rok trajanja (neke moje aplikacije su u uporabi vec tamo, od 2003 i .NET 1.1), izbjegavajte necitljive konstrukte i kometrar neka uvijek opisuje zeljenu operaciju. U tvom slucaju npr.:

 

Za pretvorbu velikih slova (64..91) u mala ako je u pitanji ASCII tabela, dovoljno je podesiti sesti bita na 1 

 

Iz neceg takvog (ispricavam se na slabijem znanju jezika) moze netko i poslije par godina skuziti, koju je namjeru programer imao, kad je pisao kod. U tom duhu je mnogo put bolja uporaba dobrih starih (verbose) konstrukta, ako gledam iz izkustva i prakse. 

Ja bih se izuzetno ne složio s ovime.
Lambda nisu baš niti nove, niti da su samo za mlađu populaciju (Javascript je efektivno jezik napisan oko filozofije koju lambda izrazi koriste). Također, ako govorimo o .NET-u, lambde su nešto na čemu se temelji moderni način pisanja aplikacija (ne znam, recimo prvo što mi pada na pamet je Fluent API u EF Coreu, naspram starog EF-a).
Preglednost ili nepreglednost koda nema nikakve veze sa lambda izrazima. Štoviše, pravilno njihovo korištenje može uvelike olakšati čitanje koda. Također, komentari kada se koriste kao alat opisa što kod radi su jedan od najgorih grešaka koji se pojavljuju u kodu. Ono što na ovom primjeru nedostaje sa stajališta čitkost je najobičnija enkapsulacija.

 

var nekiPocetniString = "Blah blah blah";
nekiPocetniString

   .ToUpper()

   .ReplaceDiacriticSingsWithOrdinaryCounterparts();

 

Čim smo pravilno enkapsulirali kod, niti su nam potrebni komentari, niti se troši puno vremena na shvaćanje koda, a još smo besplatno dobili i separacije. Jedino što nisam siguran je kako se dijakritički znakovi pišu na engleskom. 

You can patch technical vulnerabilities as they evolve, but there is no patch for stupidity, or rather gullibility. - Kevin Mitnick
15 godina
offline
C# - Problemi i rješenja

Kako prikazati naša slova u popisu datoteka iz *.zip datoteke?

Čitam sadržaj datoteka iz *.zip datoteke, da vidim dal sadrži sve potrebne datoteke, ali umjesto naših slova dobivam hijeroglife. 

Čitam i sadržaj pojedinog direktorija i to je ok. Jedino kaj mi pada na pamet u *.zip datoteci je .Replace, ali to nije neko rješenje.

koristim dotnet 4.7.2 i sljedeći kod:

Microsoft.Win32.OpenFileDialog zipdlg = new Microsoft.Win32.OpenFileDialog();
zipdlg.DefaultExt = ".zip";
zipdlg.Filter = "ZIP Files (*.zip)| *.zip";
Nullable<bool> result = zipdlg.ShowDialog();
if(result==true)
{
string filename = zipdlg.FileName;
dirTextBox.Text = zipdlg.FileName;
float length = new System.IO.FileInfo(filename).Length;///1048576;
dirTextBox.Text += " ("+Math.Round(length/1048576,2) + "MB)";
using (ZipArchive zip = ZipFile.Open(filename, ZipArchiveMode.Read))
foreach (ZipArchiveEntry entry in zip.Entries)
{
if (entry.Name == "")
{
conDir = 1;//MessageBox.Show("DIREKTORIJ");
//punjenje liste
}
else
{
//punjenje liste
Var.lovl.Add(replace(entry.Name));
//dirFilesTbx.Text += (entry.Name + Environment.NewLine);
}
}
if (conDir == 1)
MessageBox.Show("GREŠKA: ZIP datoteka sadrži direktorije!");

[URL=&quot;http://goo.gl/KpG4TT&quot;]ANKETA[/URL] o kineskim mobitelima i [URL=&quot;http://goo.gl/xLCF5F&quot;]REZULTATI[/URL] ankete
 
0 0 hvala 0
15 godina
offline
Re: C# - Problemi i rješenja

Riješeno, ova linija mora ovako izgledati:

using (ZipArchive zip = ZipFile.Open(filename, ZipArchiveMode.Read, Encoding.GetEncoding("CP852")))

[URL=&quot;http://goo.gl/KpG4TT&quot;]ANKETA[/URL] o kineskim mobitelima i [URL=&quot;http://goo.gl/xLCF5F&quot;]REZULTATI[/URL] ankete
14 godina
offline
C# - Problemi i rješenja

Mali problemčić, nakon što sam se uspio probiti kroz hrpu joinova, zbog toga što datoteke baze nisu ispravne ni rezultat nije ispravan

 

var rezultat =  from osobe in upisane_osobe
                join adrese in adrese_osoba on osobe.radnik_ID equals adrese.radnik_ID
                join listovi ...................

 

Problem je što datoteka sa osobama ima recimo 10 osoba. Datoteka sa adresama NEMA adrese za sve osobe ima ih recimo 5, te onda kao rezultat dobijem 5 zapisa, naravno, trebao bih imati 10.

Može li se ovo napisati nekako drugačije. Taj join bi trebao biti 'labav', ako možeš spoji, ako ne možeš, ostavi mi osobu bez adrese...

 

 

Moj PC  
0 0 hvala 0
13 godina
neaktivan
offline
Re: C# - Problemi i rješenja

Treba ti left outer join:

 

var rezultat =  from osobe in upisane_osobe
               left join adrese in adrese_osoba on osobe.radnik_ID equals adrese.radnik_ID
                join listovi ...................

 

14 godina
offline
Re: C# - Problemi i rješenja

Hm, ovaj left mi daje grešku u ovom obliku.

Pokušavam složiti na drugačiji način (preko DefaultIfEmpty()), ali mi onda ne napravi ništa. Nije li možda stvar u slijedećem join?

Framework je 4.0, nadam se da će proći i na 3.5... I nije upitanju nikakva baza, obične flat datoteke.

 

17 godina
offline
Re: C# - Problemi i rješenja

Probaj ovako

 

var rezultat = from osobe in upisane_osobe

           join adrese in adrese_osoba on osobe.radnik_ID equals adrese.radnik_ID into y

           from x in y.DefaultIfEmpty()

           select....

Dvije su stvari beskonačne - svemir i ljudska glupost. Za svemir nisam siguran - Einstein
14 godina
offline
Re: C# - Problemi i rješenja

I opet neće:

 

var rezultat = from osobe in upisane_osobe
                  join adrese in adrese_osoba on osobe.radnik_ID equals adrese.radnik_ID into y
                  from x in y.DefaultIfEmpty()
                       select new { osobe.radnik_ID, osobe.omjer, osobe.naziv, x.adresa_sve };

 

Koliko sam skužio ovo mogu podjeliti na više, da tako kažem sql-ova, tako da imam novu tablicu sa ovim podacima, pa drugu tablicu isto proizvod više drugih tablica i na kraju završni rezultat opet join, samo ovaj put

 

var kraj = from podatak in rezultat

                join nabava in tablica_nabave on podatak.radnik_ID equals nabava.radnik_ID

 

Već sam pomalo lud (i ne pomalo), svima radi samo meni ne

 

17 godina
offline
Re: C# - Problemi i rješenja

radnik_ID u tablici adrese ti je nullable? Krivo, FK radnik_ID u tablici osobe ti treba biti nullable.

 

Kakav rezultat dobiješ? Kako ti izgledaju te dvije tablice?

 

Evo vidi ovo, probaj po tome. odmah prva rečenica

A left outer join is a join in which each element of the first collection is returned, regardless of whether it has any correlated elements in the second collection.

Dvije su stvari beskonačne - svemir i ljudska glupost. Za svemir nisam siguran - Einstein
Poruka je uređivana zadnji put pon 17.12.2018 13:53 (Pero Dinamit).
14 godina
offline
Re: C# - Problemi i rješenja

Ma sve sam napraio prema ovome, ali kad sam malo bolje promotrio, ovo je debug:

 

Hrvoje Horvat  101  Bjelovar

Marković Marko  100  Zagreb

Exception thrown: 'System.NullReferenceException' in Unknown Module.
Exception thrown: 'System.NullReferenceException' in Unknown Module.

 

a ako maknem ono x.adresa_sve iz izraza

var rezultat = from osobe in upisane_osobe
                  join adrese in adrese_osoba on osobe.radnik_ID equals adrese.radnik_ID into y
                  from x in y.DefaultIfEmpty()
                       select new { osobe.radnik_ID, osobe.omjer, osobe.naziv, x.adresa_sve };

 

Hrvoje Horvat  101  

Marković Marko  100 
Predrag Predragović 105
Predrag Predragovoić 105 (za ovaj upis nema adrese u adresama, za prva dva postoji)

 

Očito imam upis u tablici ali je sad pitanje kako se riješiti Null Reference Exception.

Idem se malo poigrati.

 

EDIT:

Proradilo, 'zamaskirao' sam prema onome što mi je Dinamit rekao (tj. link) u zadnjem redu upita:

 

   select new { osobe.radnik_ID, osobe.omjer, osobe.naziv, adresa = x?.adresa_sve ?? String.Empty };

 

Hvala svima

 

U stvari štima cijelo vrijeme, jedino nisam skužio da mi baca null reference....

Nisam na ti ni sa SQL niti LINQ, trebalo me samo okrenuti i pogurati.

 

 

 

Poruka je uređivana zadnji put pon 17.12.2018 20:23 (Badjo_5).
17 godina
offline
Re: C# - Problemi i rješenja

Trebao si odmah staviti grešku koju ti baca, riješilo bi se i prije. Ali neka, bitno da si skužio sada i da ti radi.

Dvije su stvari beskonačne - svemir i ljudska glupost. Za svemir nisam siguran - Einstein
14 godina
offline
Re: C# - Problemi i rješenja

Problem i je u tome da nisam dobio nikakvu grešku (upisao sam ove podatke u tablicu). Tek sam preko Debug.WriteLine skužio da imam grešku.

Naravno, visual studio ne želi 'listati' liniju po liniju: Context doesn't mach specified contects ili tako nekako.....

 

Edit:

sad i nije problem :-)

Poruka je uređivana zadnji put uto 18.12.2018 19:57 (Badjo_5).
7 godina
neaktivan
offline
C# - Problemi i rješenja

Možda netko zna i  može pomoć. Početnik sam u c# , a trebao bih se spojit na tps baze iz Clariona i koristit u c# .  

 
0 0 hvala 0
17 godina
offline
C# - Problemi i rješenja

Jel moze ovo neko pogledat malo mi je hitno a ovaj c# mi uopce nije jasan. Znaci u prvom gumbicu imam  4 textboxa, ime servera, bazu podataka, user i pw ako se koristi sql autetifikacija(to nisam ni napiso jel nzn stvarno di bi to uopce stavio). Znaci cilje je napraviti mogucnost spajanja na bazu podataka upisivanjem nabrojanih podataka

        private void button1_Click(object sender, EventArgs e)
        {
            SqlConnection sql = new SqlConnection("Server="+textBox4+"; Database= "+textBox1+"; Trusted_Connection=true");
          
                sql.Open();
                MessageBox.Show("Uspješna prijava");
           
        }

        private void button2_Click(object sender, EventArgs e)
        {
            SqlCommand cmd = new SqlCommand("select IDProizvod,Naziv,BrojProizvoda,Boja,UkupnaCijena from Proizvod inner join Stavka on Proizvod.IDProizvod = Stavka.ProizvodID where naziv like '%"+textBox5+"%' or boja like "+textBox7,sql);
        }

 

Dok ovaj drugi gumb ima dva textboxa koji se koriste u select upitu. I nije mi isto tako jasno kak da stavim da se rezultat prikazuje u dataGridView-u.

 

EDIT:nvm rijesio sam

[ Xfire: slickman25 ] [ Steam: ryou229 ] [ Battle.net: exzzy#2808 ] [ EUNE:exzzy ][EUW:exzzy]
Poruka je uređivana zadnji put ned 20.1.2019 9:55 (R4zOR229).
Moj PC  
0 0 hvala 0
7 godina
neaktivan
offline
C# - Problemi i rješenja

Pozdrav. imam problem treba da uradim jedan zadatak uz pomoc refleksije u c# a ne mogu nikako da ga uradim ako moze ko da mi pomogne .

"Korišćenjem refleksije, potrebno je ispitati osobine .NET klase String. Potrebno je prikazati naziv klase, njen prostor imena, naziv sklopa u kome se nalazi, tip koji nasleđuje, interfejse koje implementira, kao i osnovne informacije o tome da li je klasa apstraktna, zapečaćena, generička itd."

 
0 0 hvala 0
11 godina
offline
Re: C# - Problemi i rješenja

Poigraj se malo s typeof i klasom Type.

7 godina
neaktivan
offline
C# - Problemi i rješenja

Hvala, nadosao sam i ja. bunilo me malo klasa Type jer ima i metoda GetType("System.string") ali dobro je vazno da sam skontao hvala.

 
0 0 hvala 0
7 godina
neaktivan
offline
C# - Problemi i rješenja

Pozdrav imam jos jedno pitanje, treba da dinamicki napravim klasu i da iskoristim metodu medjutim ne uspjeva mi prilikom dinamickog pozivanja metode ako moze neko pomoci ? ov je sto sam do sada uspjeo da odradim i tu sam udario u zid..

 

namespace Dinamickokreiranjetipova
{
    class Country
    {
        public string Name { get; set; }
        public int Population { get; set; }
        public Country (string name, int population)
        {
            Name = name;
            Population = population;
        }
        public string GetCountryInfo()
        {
            return "Country " + Name + " has the population of " + Population + ".";
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Assembly assembly = null;
            try
            {
                assembly = Assembly.Load("Dinamickokreiranjetipova");
            }
            catch (FileNotFoundException exc)
            {

                Console.WriteLine(exc.Message);
            }

            Type country = assembly.GetType("Dinamickokreiranjetipova.Country");
            object obj = Activator.CreateInstance(country,new object[] {"Afrika",1 });
            Console.WriteLine($"Novi tip kreiran dinamicki: {obj}");

            MethodInfo methodInfo = country.GetMethod("GetCountryInfo");

            methodInfo.Invoke(obj);

            Console.ReadLine();
        }
    }
}

 
0 0 hvala 0
10 godina
neaktivan
offline
Re: C# - Problemi i rješenja

Pozdrav,

 

znači skoro si tamo.

Metoda .Invoke prima dva paramtera, objekt na kojem se pokušava izvršiti i polje parametara tipa "object" koji mora odgovarati broju i tipu parametara koje metoda koja se poziva prima.

Metoda koju ti pokušavaš pozvati ne prima paramtere pa možeš proslijediti prazno polje tipa "object".

 

            ...
            MethodInfo methodInfo = country.GetMethod("GetCountryInfo");

            object[] parameters = new object[]{}; //Stvoriš prazno polje i proslijediš ga kao drugi parametar u poziv metode.

            methodInfo.Invoke(obj, parameters); // Ne zaboravi ovaj poziv staviti u Console.WriteLine() jer metoda koju pozivaš vraća string pa ako to ne napraviš nećeš ništa dobiti na konzoli.
            ...

 

Pozdrav

 

12 godina
neaktivan
offline
C# - Problemi i rješenja

Pozdrav ekipa, trebam pomoc oko zadatka koji smo dobili. Radi se u grafickom sucelju unutar C#
Voljan sam sjesti preko Discorda, TS3, Skype, bilo cega,  i raditi na ovom seminaru koliko god treba uz pomoc. Do sada smo prosli kroz nekakve osnove rada sa matricama, datotekama i na zadnjim vježbama sa Windows Forms app (graficko sucelje). Do ove godine na seminarima nije bilo grafickih sucelja pa nitko iz visih godina ne moze/zeli pomoci. 
EDIT: Zadatak je rijesen uz pomoc jednog forumaša koji je htio ostati anoniman. Hvala! 

Poruka je uređivana zadnji put čet 16.5.2019 17:50 (crolux).
 
0 0 hvala 0
16 godina
neaktivan
offline
C# - Problemi i rješenja

Pozdrav,

 

Da li ima netko volje mi pročešljat kratki kontroler i popravit ili makar uočit 3 greškice koje ne mogu pronači...Radi se o C# .net jednostavnoj web aplikaciji. To mi je prva aplikacija u .netu te bio puno zahvalan na pomoći :)

Poruka je uređivana zadnji put pon 20.5.2019 16:27 (Rolac).
Moj PC  
0 0 hvala 0
17 godina
offline
Re: C# - Problemi i rješenja

Stavi tu kôd pa će se valjda netko već javiti. Iako ne kužim kako znaš da imaš 3 greške, ali ih ne možeš pronaći 

Dvije su stvari beskonačne - svemir i ljudska glupost. Za svemir nisam siguran - Einstein
17 godina
offline
C# - Problemi i rješenja

Oce mi neko objasnit sta krivo radim, ne ispise mi se nista. Znaci pokusavam lodat JSON i spremit ga kao objekt.

 

Ovdje je linije koda iz fila

{
  "WiFi": {
    "SSID": "MyCharterWiFi83-2G",
    "BSSID": "c4:04:15:0e:c0:83",
    "capabilities": "[WPA2-PSK-CCMP][WPS][ESS]",
    "level": "-38",
    "frequency": "2462",
    "time": "Saturday, November 1, 2014 12:01:38 AM Pacific Daylight Time"
  }
}

 

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

namespace wifi
{
    class Program
    {

        static void Main(string[] args)
        {
            string json = File.ReadAllText(@"primjer.txt");
            Wifi wifi = JsonConvert.DeserializeObject<Wifi>(json);
            Console.WriteLine(wifi.SSID);
            Console.Read();
        }

        public class Rootobject
        {
            public Wifi WiFi { get; set; }

        }

        public class Wifi
        {
            public string SSID { get; set; }
            public string BSSID { get; set; }
            public string capabilities { get; set; }
            public string level { get; set; }
            public string frequency { get; set; }
            public string time { get; set; }
        }

    }
}

[ Xfire: slickman25 ] [ Steam: ryou229 ] [ Battle.net: exzzy#2808 ] [ EUNE:exzzy ][EUW:exzzy]
Poruka je uređivana zadnji put sri 29.5.2019 20:04 (R4zOR229).
Moj PC  
0 0 hvala 0
18 godina
offline
Re: C# - Problemi i rješenja

Ako ti kontroliras JSON file, izbaci "WiFi {}" i radit ce taj kod

 

{
 "WiFi": {
    "SSID": "MyCharterWiFi83-2G",
    "BSSID": "c4:04:15:0e:c0:83",
    "capabilities": "[WPA2-PSK-CCMP][WPS][ESS]",
    "level": "-38",
    "frequency": "2462",
    "time": "Saturday, November 1, 2014 12:01:38 AM Pacific Daylight Time"
  }
}

Object reference not set to an instance of an object
17 godina
offline
Re: C# - Problemi i rješenja

Hvala, ali je problem jel imam par milijuna linija a ne samo jednu, tak da to nemogu izbaciti.

[ Xfire: slickman25 ] [ Steam: ryou229 ] [ Battle.net: exzzy#2808 ] [ EUNE:exzzy ][EUW:exzzy]
15 godina
offline
Re: C# - Problemi i rješenja
R4zOR229 kaže...

Hvala, ali je problem jel imam par milijuna linija a ne samo jednu, tak da to nemogu izbaciti.

 Ponavlja ti se negdje "WiFi" key u json-u ili je on jedinstven?

 

Ako je jedinstven možeš probati sa dictionary opcijom

https://www.newtonsoft.com/json/help/html/DeserializeDictionary.htm

 

Isto tako ako je riječ o stvarno kompleksnom jsonu možda je puno bolja deserijalizacija samo dijela jsona koji ti treba

https://www.newtonsoft.com/json/help/html/SerializingJSONFragments.htm

 

Kolega ispod je naveo najispravnije rješenje ukoliko je json ovakve strukture kakvu si naveo. Pretpostavljam da ti { prije "WiFi" key-a predstavlja početak cijeloga json-a, a ne vrijednost nekoga atributa koji je dio toga korijena. 

Poruka je uređivana zadnji put čet 30.5.2019 23:19 (fighterZu).
13 godina
neaktivan
offline
Re: C# - Problemi i rješenja

Prikazani JSON ne sadrži Wifi, nego Rootobject pa možeš deserijalizirati njega:

 

...
            Rootobject rootobject = JsonConvert.DeserializeObject<Rootobject>(json);
            Console.WriteLine(rootobject.WiFi.SSID);

Nova poruka
E-mail:
Lozinka:
 
vrh stranice