- Hat év támogatást csomagolt fém házba a OnePlus Nord 4
- Légies iPhone halvány színei
- Azonnali navigációs kérdések órája
- Google Pixel topik
- Vékonyabb lett, jobb kamerát kapott, de az akku maradt a régi: itt a Fold7
- Bővebb Google-támogatást kap sok Garmin óra
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Samsung Galaxy S23 Ultra - non plus ultra
- iPhone topik
- Motorola Moto G56 - bátyja árnyékában
Új hozzászólás Aktív témák
-
alratar
addikt
Sziasztok.
Lehet nagyon amatőr kérdét fogok féltenni, amiért előre is bocsánatot kérekk!
Mit jelent az pontosan, hogy az értékül adott kifejezés eredményének nem szükséges ismertnek lennie fordítási időben?
-
rgeorge
addikt
Egy kedves partnerünk kéri tőlünk, hogy idézem: "naplózzuk az XML fájlokat, amivel az ő webservice-jüket hívjuk". Van erre egyszerű megoldás C# oldalon? A fiddler-ről tudunk/tudnak, de azt gondolják, hogy ez csak pár sornyi kód lenne.
-
d3ad93
csendes tag
Én fősulin fogalkozok C#-al. Előtte java volt az, a programozás alapjait pedig c-ben tanultam. Ha azért tartod bonyolultnak a C#-ot, mert objektum orientált és ott pont a tömböt említetted akkor azt javasolnám, hogy az OOP alapjait nézd át kicsit, itt példányosításra és öröklődésre gondoltam. Ha azt megérted akkor szerintem nem lesz problémád vele.
-
vlevi
nagyúr
Össze kell joinolni a két listát.
[link]
Csináltam egy mórickaprogit, ami ugyanezt csinálja.class Program
{
class Dolgozo
{
public String nev;
public int ID;
}
class Projekt
{
public int dolgozoID;
public int projekt;
}
static void Main(string[] args)
{
List<Dolgozo> dolgozok = new List<Dolgozo>();
dolgozok.Add(new Dolgozo { nev = "Béla", ID=1 });
dolgozok.Add(new Dolgozo { nev = "József", ID=2 });
dolgozok.Add(new Dolgozo { nev = "István", ID=3 });
dolgozok.Add(new Dolgozo { nev = "Lajos", ID=4 });
List<Projekt> projektek = new List<Projekt>();
projektek.Add(new Projekt { dolgozoID = 1, projekt = 10 });
projektek.Add(new Projekt { dolgozoID = 3, projekt = 5 });
projektek.Add(new Projekt { dolgozoID = 4, projekt = 7 });
var projektlista = from dolg in dolgozok
from proj in projektek
where dolg.ID == proj.dolgozoID
orderby proj.projekt
select new { dolg.ID, dolg.nev, proj.projekt }
;
foreach (var item in projektlista)
{
Console.WriteLine(item.ID+" "+item.nev+" "+item.projekt);
}
Console.ReadKey();
}
}A lényeg középen van, a projektlista-ban
var projektlista = from dolg in dolgozok
from proj in projektek
where dolg.ID == proj.dolgozoID
orderby proj.projekt
select new { dolg.ID, dolg.nev, proj.projekt }
; -
pomorski
őstag
Köszönöm!
-
kingabo
őstag
Gondolom, ha a listában sima intek lennének simán menne a rendezés, ugye? Ha igen, akkor a rendezésnél használt feltétel úgy módosul, hogy nem a lista adott elemeit hasonlítod össze(2 int), hanem a két elem 1-1 propertijét: Projects.Count.
A te megoldásodnak is működnie kéne, valszeg valamit rosszul írtál meg. Igaz rettentően bonyolult és sok a fölösleges munka. Ettől függetlenül gyakorlásnak jó lehet.
-
Dinter
addikt
Van egy listám, amiben a dolgozók adatai, és egy másik, amiben hogy ki hány projektet végzett. A projektek száma alapján kéne sorba kiíratnom. Gondoltam rá, hogy lemásolom a számokat tartalmazó listát, azt sorbarakom, majd megkeresem a számok eredeti indexét a másik listában(ami = az azonosítójával a dolgozónak, ez által ki bírom íratni a nevét). Ez viszont nem működik. Mit ajánlotok?
-
Karma
félisten
A feltételezésed nettó tárgyi tévedés, semmi ilyen fekete mágia nem történik. Valószínűleg elcsúsztak az indexek a feltételben, és a sornak nincs ötödik eleme.
Kérlek kezdd el végre használni a Visual Studio debugger funkcióját, tégy egy breakpointot a problémás sorra, és meg tudod nézni hogy melyik változóban milyen értékek vannak.
-
Dinter
addikt
using (StreamReader uzi = new StreamReader("uzenetek.txt"))
{
while ((line = uzi.ReadLine()) != null)
{
Uzenet uzenet = new Uzenet();
var sor = line.Split(':');
(int.TryParse(sor[4], out numerikus) == true)
{
uzenet.projektszam = Convert.ToInt32(sor[0]);
uzenet.kuldes = sor[1];
uzenet.feladoid = Convert.ToInt32(sor[2]);
uzenet.cimzettid = Convert.ToInt32(sor[3]);
uzenet.uzenet = sor[4];
ertekelesek.Add(uzenet);
}
else
{
uzenet.projektszam = Convert.ToInt32(sor[0]);
uzenet.kuldes = sor[1];
uzenet.feladoid = Convert.ToInt32(sor[2]);
uzenet.cimzettid = Convert.ToInt32(sor[3]);
uzenet.uzenet = sor[4];
uzenetek.Add(uzenet);
}
}
}"Az index a tömb határain túl mutat" hibát kapok az if feltételnél, gondolom azért, mert egyszerre fordul le, és a line még nem kap értéket. Hogy tudnám ezt kiküszöbölni?
-
Karma
félisten
Akkor tehát az volt a hiba, amire gondoltam. Ha más változónevet használsz a foreachben, akkor nem lesz ütközés, és hiba se.
Ezt a versenyt nem ismerem, de mivel sehol se írják konkrétan, szerintem a szöveges felületet is el kellene fogadniuk. Azért megkérdeznék róla egy másik versenyzőt, egy szervezőt vagy neadjisten egy infótanárt.
-
Dinter
addikt
Ez már jó, csak arra írtam, hogy miért a for-ral próbálkoztam.
Ezt írta ki korábban:
A local variable named 'dolgozo' cannot be declared in this scope because it would give a different meaning to 'dolgozo', which is already used in a 'parent or current' scope to denote something else[link] Ez a feladat amúgy. Amikor azt írja, hogy kezelőfelületet kell készítenem, akkor arra gondol, hogy az alkalmazásnak WinForm Appnak kell lennie, vagy lehet Console App is?
-
Dinter
addikt
Erre gondoltam. Egyébként azért próbálkoztam for-ral, mert az előző(hibás) kódban ha a dolgozo-kon akartam végigmenni, akkor hibát írt ki.
bool sikeres = false;
do
{
Console.Write("Add meg a neved: ");
string nev = Console.ReadLine();
Console.Write("Add meg a jelszavad: ");
string jelszo = Console.ReadLine();
foreach (Dolgozo dolgozo in lista)
{
if (dolgozo.nev == nev && dolgozo.pw == jelszo)
{
sikeres = true;
}
else
{
}
}
if (sikeres)
{
Console.WriteLine("Sikeres bejelentkezés!");
}
else
{
Console.WriteLine("Nem sikerült bejelentkezni.");
}
} while (!sikeres); -
-
Karma
félisten
Húha. A belinkelt kódodban egyetlen Dolgozo példányt hozol létre, amit valamiért "dolgozok" nevű változóba raksz, és ennek tragikus következményei vannak a folytatásra nézve. Ha debuggerrel megnéznéd a listádat, akkor azt látnád, hogy bár annyi eleme van a listának, mint ahány sorod volt a szövegfájlban, mindegyik elem ugyanaz (a legutolsó rekord a fájlban).
Minden sorhoz új Dolgozo példányra van szükséged, lásd itt:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace dolgozok
{
struct Dolgozo
{
public int id;
public string nev;
public string pw;
public bool vezeto;
}
class Program
{
static void Main(string[] args)
{
List<Dolgozo> lista = new List<Dolgozo>();
string line;
using (StreamReader sr = new StreamReader("dolgozok.txt"))
{
while ((line=sr.ReadLine())!=null)
{
var sor = line.Split(':');
Dolgozo dolgozo = new Dolgozo();
dolgozo.id = Convert.ToInt32(sor[0]);
dolgozo.nev = sor[1];
dolgozo.pw = sor[2];
dolgozo.vezeto = Convert.ToInt32(sor[3]) == 0;
lista.Add(dolgozo);
}
}
Console.ReadKey();
}
}
}A nevezéktanba és a kisbetű-nagybetű dolgokba nem akartam belenyúlni, de lenne mit javítani azon a fronton. És egyébként az elején létrehozott string[4]-re sincs semmi szükség, mert a Split mindig újat hoz létre.
---
Az ide másolt kódban el tudnád mondani, mégis milyen indíttatásból csináltál hatos ciklusokat; és miért kéred be ennyiszer a nevet és a jelszót? A sorrend kicsit rossz, de ha a fejedben helyrerakod a lépések sorozatát, szerintem gyorsan rájössz a megoldásra. For ciklus nem lesz benne, és indexekkel se kell játszadoznod – a kérdés ugyanis az, hogy "van-e olyan Dolgozo a lista-ban, akinek a neve és a jelszava egyezik a megadott értékekkel?".
Athlon64+: Én úgy látom, az OP kérdés minden része le lett fedve.
De majd szól, ha valami kimaradt. -
Dinter
addikt
Adott a következő feladat:
A dolgozok.txt fájlból be kell olvasnom a dolgozók adatait, egy sorban egy dolgozó van. Az adatok típusát : választja el.
id:név:jelszó:cágvezető-e
1: Kata:12K55:1
2:Ica:9I44C:0
...kód: [link]
A feladat első része egy beléptető felület. Arra gondoltam, hogy beolvasom a felhasználónevet, megkeresem az indexét, ugyanezt a jelszóval, és ha a kettő nem egyezik (vagy -1 mindkettő), akkor sikertelen a belépés.
Itt viszont nem tudom hogy tudnék végigmenni a dolgozok-on, vagy egy dolgozónak kiíratni az összes adatát.
Így oldottam volna meg:bool helyes=false;
do
{
int nevindex=0;
int pwindex=0;
Console.Write("Add meg a felhasználónevet: ");
for (int i = 0; i < 6; i++)
{
if(lista[i].nev==Console.ReadLine()){
nevindex=i;
}
else{
nevindex=-1;
}
}
Console.Write("Add meg a jelszót: ");
for(int i=0;i<6;i++){
if(lista[i].pw==Console.ReadLine()){
pwindex=i;
}
else{
pwindex=-1;
}
}
if (nevindex==pwindex)
{
Console.WriteLine("\nSikeres belépés!\n");
helyes = true;
}
else
{
Console.WriteLine("\nHibás felhasználónév vagy jelszó!\n");
}
} while (!helyes); -
Karma
félisten
válasz
Peter Kiss #6674 üzenetére
Nem lesz végtelen ciklus, mert amikor a ReadLine nullt ad vissza – és a Split nem hívódik meg – az egész kifejezés értéke null lesz, a ciklus meg megszakad.
Bár tény, nem próbáltam ki, mert telefonon írtam, de nem hiszem, hogy ebben az esetben máshogy működne a ?. operátor, mint általában.
rgeorge: Írtam is.
-
Karma
félisten
"ezzel a módszerrel mindenképp egyből be kell töltenem egy másik stringbe, és a stringet splitelem?"
Itt azért fékezzünk egy kicsit. Azzal, hogy egy lokális változót vezetsz be a stringnek, még nem "töltesz" semmit sehová, és véletlenül sem lesz kettő stringed. Egyetlen példány létezik belőle, amit a ReadLine visszaadott, függetlenül attól, hogy hány néven nevezed.
A vlevi és martonx által leírt megoldás a helyes alapvetően.
Ha mindenképp meg akarnád spórolni azt a string változót, akkor a C# 6-os null-safe invocationnel meg lehet oldani tömörebben, de szerintem ennek nincs előnye ebben az esetben, viszont nehezebben olvasható.
while ((var sor = sr.ReadLine()?.Split(':')) != null)
{
// ...valami a sorral (String[])...
} -
-
Dinter
addikt
Azt hiszem rájöttem. Amikor másodszor is használom a while-lon belül (előtte a feltételben), akkor a következő sorra ugrik. Van valami módja, hogy a ReadLine tartalmát egyből spliteljem(a feltételben hibát ad), vagy ezzel a módszerrel mindenképp egyből be kell töltenem egy másik stringbe, és a stringet splitelem? Vagy simán átírom a feltételt !sr.EndOfStream-re Az a kérdésem továbbra is áll, hogy melyik módszer a legjobb?
-
Dinter
addikt
Mi a különbség, ha azt írom, hogy
using (StreamReader sr = new StreamReader("dolgozok.txt"))
{
while (sr.ReadLine() != null)
{
sor = sr.ReadLine().Split(':');
...
}vagy
using (StreamReader sr = new StreamReader("dolgozok.txt"))
{
while (File.ReadLines("dolgozok.txt")!= null)
{
sor = sr.ReadLine().Split(':');
...
}Az elsőnél a 6 sorból valamiért mindig csak a másodikokat olvassa be. Miért? A beolvasásnak melyik módját ajánljátok? StreamReader vagy File.ReadLines() while ciklusban?
-
Alexios
veterán
Azért csak az utolsó marad mert itt:
sorok=sor.Split(' ').ToList();
Mindig felülírod a sorok listát egy új listával.
A split metódus egy tömböt hoz létre ami a felosztás utáni stringeket tartalmazza. Ebből a ToList-el csinálsz egy string típusú listát, lényegében a tömböt alakítod át listává. A sorok=sor.Split kóddal nem hozzá adod a listához új értékként, hanem azt mondod hogy a sorok erre a listára mutasson. Vagy csinálsz egy listát ami List<string> típust fogad és abba rakod bele a .Add metódussal, vagy szebb megoldásként csinálhatsz pl. egy osztályt amibe beolvasod az árfolyamokat és ezeket rakod a listába. -
Dinter
addikt
Üdv.
Egy fájlból szeretnék beolvasni 3 sort, mindegyikben a következő van: árfolyam értéke
Ezt úgy gondoltam, hogy először splittel listbe szétszedem őket, aztán a párosokat és a páratlanakat külön egy másik listbe.Adott ez a kód:
List<string> sorok=new List<string>();
string sor;
using (StreamReader sr = new StreamReader("árfolyamok.txt"))
{
while((sor=sr.ReadLine())!=null)
sorok=sor.Split(' ').ToList();Hogy tudom elérni, hogy a listában az összes árfolyam tartalma megmaradjon, ne csak az utolsó? list.Add nem működik.
-
sztanozs
veterán
válasz
Angol34 #6663 üzenetére
Nem offtopik, hanem konkrétan tilos... Erre ott van az Állásbörze.
-
Angol34
csendes tag
Sziasztok!
Remélem nem off topik ha C# fejlesztői állást ajánlok?!Sürgősen keresünk Budapestre (13 ker) fejlesztő kollégákat hosszú távú, bejelentett munkára.
Szakmai elvárásaink: C#, .NET (4.0), XAML (Silverlight vagy WPF), WCF, tervezési minták, verzió kezelők ismerete.
Fiatal csapat, kiemelt fizetés, azonnali kezdés! Jelentkezni egyszerű szakmai önéletrajzzal:
hr kukac paytech.hu -
pakriksz
őstag
válasz
Peter Kiss #6659 üzenetére
azért nézd meg a kódot is... Fönt még nincs baja ugyan azzal a változóval. Lent van.
Egyébként pár összevissza mentegetés módosítgatás, nem ért semmit, majd újraindítottam ezt az ipari hulladék VSE-t, és eltűnt a hiba... Sajnos a microsoft most sem hazudtolja meg magát szoftver minőségben.
-
pakriksz
őstag
Erre valaki adjon már valami magyarázatot erre, mert nekem nem sikerült...
Mint látható, az aláhúzott változónak fönt tudok értéket adni, lejjebb már azt írja hogy nincs deklarálva. Ráadásul más változókat amiket ugyan ott ugyan úgy deklaráltam mint ezt (2 bool-t meg egy int-et) még a legbelsőbb if-ben is tudom használni.
-
válasz
sirszevenap #6653 üzenetére
-
Karma
félisten
válasz
sirszevenap #6653 üzenetére
Ez nem elképzelés eddig, csak egy kocsmai ötlet, és egyébként egy nem túl acélos megoldás felé mutat.
Ha csak annyi a védelem, hogy "úgy eldugom a registryben hogy ne találja meg egy átlagfelhasználó", akkor akár egy fájlt is elrakhatsz az Application Data alatt, ott se fogja keresni. Az elég könnyen lenyomozható (ProcMonnal), hogy milyen kulcsot ellenőriz az alkalmazás indulás során.
Én nem szórakoznék házi megoldással, se nem akarnám feltalálni a kereket. Ha olyan szoftverről van szó, aminél tényleg megéri egy ilyen time trial változat elkészítése, mert majd nagy pénzek jönnek be utána, inkább azt javaslom, hogy fizess be egy kész licensing szolgáltatásra.
-
sirszevenap
addikt
Sziasztok.
Visual Studioba szeretnék csinálni egy olyan programot, amely a registry-be beírja magát és amolyan Trial versioként működik.
Példának okáért:
30 Napos Trial.
2015.10.01 - én kezdődik
2015.10.31 - én lejárAmikor lejár, a program írja ki hogy Lejárt a próbaverzió. Dátumátállítással ne lehessen kijátszani illetve áltag felhasználó ne találja meg a registrybe.
Nem igazán megy a kivitelezése, hiába van meg az elképzelés!
Tudtok nekem ebben segíteni? -
ubid
senior tag
Na igen...
Viszont :
string s1 = "11.22.33."; //falseennek itt false-nak kéne lennie. De a c# az true-t ad vissza , mert 11.22.33 eddig MATCH-el...
Egy csúnya trükk, ha Match-et hívok,akkor mindig csak 1 match-el foglalkozok, amiből az illeszkedő string-nek ugyan akkorának kell lennie mint a bemenőnek...
De az nem a legszebb ...
Új hozzászólás Aktív témák
Hirdetés
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- iPhone 12 64GB - fehér Garanciális 2026.01.07
- szinte új HP E24m G4 full HD 1920x1080 IPS monitor- rejtett Webkamera - nagy hangszóró - USB-C
- NEC MultiSync EA275WMi 27" képátló/ AH-IPS panel/2560x1440 (WQHD)/ A- kategória nagyon apró hibával!
- új aktiválatlan iPhone 16 128GB black fekete független 1 év Apple garancia
- szinte új iPhone 16 Pro 256GB black titanium fekete titán független Apple 3 év garancia adapter
- Bomba ár! Dell Latitude E7270 - i7-6GEN I 8GB I 256GB SSD I 12,5" FHD I HDMI I CAM I W10 I Gari!
- LG 34GS95UE - 34" Ívelt OLED / QHD 2K / 240Hz & 0.03ms / 1300 Nits / NVIDIA G-Sync / AMD FreeSync
- Csere-Beszámítás! MSI Gaming X RTX 4060Ti 16GB GDRR6 Videokártya!
- Azonnali készpénzes Sony Playstation 4 Slim / PS4 Pro felvásárlás személyesen/csomagküldéssel
- Csere-Beszámítás! RTX Számítógép PC Játékra! I3 10100F / RTX 2060 12GB / 32GB DDR4 / 500GB SSD
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest