Hirdetés
- Netfone
- Motorola Moto G54 5G Power Edition - nem merül le
- Telekom mobilszolgáltatások
- Samsung Galaxy A54 - türelemjáték
- A Xiaomi nem késlekedik az Android 15-tel
- Samsung Galaxy A35 5G - fordulópont
- Yettel topik
- Huawei P30 Pro - teletalálat
- Realme GT Master Edition - mestermunka
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
Hirdetés
-
Befutott a The Patrick Star Game premier előzetese
gp Spongyabob nagy haverja mostantól új játékban garázdálkodik.
-
Greenwashing miatt támadják az olaszok a Sheint
it Olaszország vizsgálatot indított a Shein weboldal és app ellen, greenwashing vádjával.
-
GPS és jobb üzemidő a Garmin Lily 2 Active-ban
ma Valamelyest a forma is változott, de a legnagyobb újdonság a műholdas vevő bekerülése.
Új hozzászólás Aktív témák
-
Karma
félisten
válasz tototos #6600 üzenetére
Ott valamit nagyon elnézel, az input változó biztosan nem egy szöveget tartalmaz. Mondjuk ha megpróbálod kiíratni, akkor tényleg ezt kaphatod.
Az a helyzet, hogy a LINQ query szintaxis, hasonlóan a legtöbb LINQ metódushoz, nem listát ad vissza, hanem egy IEnumerable-t; leegyszerűsítve egy "képletet", hogy hogy lehet végrehajtani az általad felsorolt műveleteket. Nem is fut végig a stringlistádon ekkor még.
Ha a visszakapott IEnumerable-ön hívsz egy ToList()-et, végigfut a ciklus és megkapod a tényleges listát.
var lines = File.ReadLines(fileName);
var input = (from line in lines
where (!line.Contains("dblink"))
select line).ToList();Így már input egy List<String> lesz, benne a neked kellő sorokkal.
A metódus formában ez így nézne ki, igazából szerintem egy ilyen egyszerű szűrésnél sokkal jobban olvasható:
var lines = File.ReadLines(fileName)
.Where(line => !line.Contains("dblink"))
.ToList();---
A ToListen kívül a ToArray, ToDictionary, ToLookup metódusok hívásakor, továbbá foreach ciklussal vagy XAML bindinggal is kiértékelődik a képlet.
Nagyon oda kell figyelni arra, hogy ahány ilyet hívsz, annyiszor újrakezdi a teljes számolást! Ezért miután a képleted teljes, célszerű a ToListtel materializálni a listát, és így megspórolni a felesleges újraszámolásokat.
---
Csendben kicseréltem a ReadAllLines hívást ReadLinesra. Ennek a verziónak az a hatalmas előnye, hogy nem olvassa fel azonnal a teljes fájlt a memóriába, hanem soronként dolgozza fel, ahogy materializálódik az eredmény, memóriát spórolva. Jobban is passzol a LINQ filozófiájához.
[ Szerkesztve ]
“All nothings are not equal.”
-
-
Keem1
addikt
Emberek, elsősorban PHP-ban és C#-ban is járatos kollégák tanácsára, segítségére lenne szükségem.
Adott egy PHP-ban tökéletesen működő reguláris kifejezés, ami valahogy egyáltalán nem akar működni C# alatt, pedig szükségem lenne rá.A PHP-ban perfektül működő kód:
preg_match('/og:image"\s*content="([^"]+)"/', $content, $matches);Ez akarna lenni a C#-os verzió:
Match talalat = Regex.Match(Content, 'og:image"\s*content="([^"]+)"', RegexOptions.IgnoreCase);Fordításnál kapott hiba:
"Unrecognized escape sequence", és a \s részhez mutat az üzenet.Sajnos a regex kifejezést muszáj lenne megtartanom, mert a PHP-s és a C#-os programok részben ugyanazt a feladatot végeznék és ehhez szükségem lenne arra, hogy az a művelet, ahová szánom mindkettőt, az megegyező eredmény sztringet generáljon.
Minden ötletet, javaslatot előre is köszönök! -
Karma
félisten
A baj nagyon egyszerű, sajnos a fordító hibaüzenete nem sokat segít elsőre - bár igaza van, olyan karakter nincs, hogy \s.
'og:image"\s*content="([^"]+)"' <-- ez nem valid string literál C#-ban. JavaScriptben meg gondolom PHP-ban elmegy, de itt kötelező idézőjelekkel körbevenni. Aposztrófokkal char literált kapsz. Ha nem lenne ott a \s, akkor már egyértelműbb lenne a hibaüzenet.
Helyesen így nézne ki, amit le akartál írni:
@"og:image""\s*content=""([^""]+)"""Mint láthatod, a belső idézőjeleket meg kellett duplázni. A @ prefix pedig azért kell, hogy a backslasheket ne escape karakterként kezelje, hanem közvetlenül tegye bele a stringbe. (@ nélkül azokat is meg kéne duplázni.)
[ Szerkesztve ]
“All nothings are not equal.”
-
Keem1
addikt
Huhh, harmadik olvasásra fogtam fel, amit mondasz. Hiába, mostanság túl sok volt a PHP és túl régen a C#, már látom hogy hülyeséget csináltam
Viszont úgy tűnik, hogy az eredmény nem azonos.
Míg a PHP eredményül csak az og:image kép URL-jét adja eredményül, addig a C# ugyanarra a kifejezésre az og:image résztől kezdve a meta tag végéig az egész sztringet visszaadja.
Esetleg ötlet, hogy mitől lehet? Ettől függetlenül természetesen nagyon köszönöm az útmutatást.Hopp, máshol is ezt mondták, tehát egyértelműen alapvetően a saját hülyeségem a hiba oka, mindenkinek feltűnt, csak nekem nem.
Viszont akkor tényleg új probléma van, hogy sajnos nem a tiszta kép url-t kapom, hanem némi felesleggel megspékelve: [link]
#6611 Karma: meglesed ezt a fenti linket? Itt szerintem látni fogod, ha futtatod. PHP csak a kép url-t adja vissza.
[ Szerkesztve ]
-
pakriksz
őstag
Hello
Ki kéne javítanom egy nagyon hülye kódot, amit nem egyészen értek, és én tökmáshogy csináltam volna, de nem akarom újraírni a program felét. Fájlból olvasott kódot ellenőriz, mármint azt hogy megtörtént-e a próbálkozás. Nem pontosan írom a kódot, csak nagyjából, egyszerűsítve.
Van egy enum, aminek első pár eleme így néz ki:
public enum SettingsFlags
{
Setting1 = 0x0001,
Setting2 = 0x0002,
Setting3 = 0x0004,
//és továbbAztán SettingFlags checkFlags; deklarálva van, majd minden egyes fájlból olvasott érték után csinál valamit:
ReadFloat(); checkFlags |= SettingsFlags.Setting1;
ReadFloat(); checkFlags |= SettingsFlags.Setting2;
ReadFloat(); checkFlags |= SettingsFlags.Setting3;
//és így továbbMajd ellenőrzi, hogy mind be lett e olvasva:
if (checkFlags == (SettingsFlags.Setting1 | SettingsFlags.Setting2 | SettingsFlags.Setting3
Na most a gond az, hogy nem feltétlenül szükséges az összes paraméter, de mivel ezek a flagek máshol is szükségesek, nem hagyhatom ki az olvasás utáni checkFlags buzerálást. Ha az ellenőrzésnél lehagyom a nem feltétlenül szükséges paraméterek flagjait, akkor meg ugye soha sem lesz true, mert nem stimmel a szám.
Szóval lehet ellenőrizni csak bizonyos flagek meglétét, vagy csak az összeset lehet?[ Szerkesztve ]
Troll (nemhivatalos definíció): az akinek véleménye nem tetszik nekünk/nem értünk vele egyet. (10-ből 9 fanboy ezt ajánlja) || Fanboy 8 in 1 (Intel, AMD, Nvidia, konzol, PC,+minden politikai oldal) hiszen "ahol nem mi vagyunk, ott az ellenség"
-
leximester
tag
Sziasztok!
Az alábbi a problémám:
Van egy UWP appom, amelyik nem fordul le.
VS 2015 ezeket dobja:
1: "Cannot resolve Assembly or Windows Metadata file 'Windows.winmd'"
2: "Type universe cannot resolve assembly: Windows, Version=255.255.'255.255, Culture=neutral, PublicKeyToken=null, ContentType=WindowsRuntime."Más gépeken lefordul.
Próbáltam a Win10 SDK-t illetve a VS-t is újrarakni, de maradt ugyan az.
Valakinek ötlete? -
lord.lakli
őstag
válasz leximester #6614 üzenetére
Gondolom a te géped Win10, ugye?
-
leximester
tag
válasz lord.lakli #6615 üzenetére
Igen az. De a többi is az, amiken próbáltam.
-
alfa20
senior tag
Sziasztok!
Egy kis segítséget szeretnék kérni, most ismerkedem a C#-al, és el is akadtam:
van egy 5-ös tömböm, amibe Random töltöm fel a számokat 1-5-ig. Ez nem gond.
Majd do while-al megvizsgálom, vannak-e egyező értékű tömbök, ha van cserélem a tömb értékét Random számmal, viszont sajnos így is van ismétlődésÍgy néz ki a kódom:
Random r = new Random();
int[] tomb = new int[5];
for (int i = 0; i < 5; i++)
tomb[i] = r.Next(1, 6);
int j = 0;
int a = -1;
do
{
a = Array.IndexOf(tomb, tomb[j]);
if (a >= 0)
tomb[j] = r.Next(1, 6);
j++;
if (j == 5)
break;
} while (a >= 0);
String kiiras = "";
foreach (int x in tomb)
kiiras = (kiiras + x + ", ");
MessageBox.Show(kiiras);A j nem lehet 4-nél több, a tömb elemei miatt.
kellene még egy do while talán?"Az agy olyan, mint az ejtőernyő: csak akkor működik, ha nyitott." (Thomas Dewar)
-
lord.lakli
őstag
Én inkább List<int>-be pakolnám. List-nek van Contains fv, ami megmondja szerepel-e benne. Ha nem, akkor hozzáadod. Ezt az egészet egy while ciklusba, ami akkor álljon meg, ha Count 5-öt ad vissza.
Így nem kell for, do-while, csak egy while.A te megoldásodban az a baj, hogy "ronda" és csak egyszer vizsgálod meg, hogy mit kell cserélni, de miután 5 elem kell és 1-5 között, így sokszor ismétlődhet.
Valami ilyesmi:
var tomb = new List<int>();
var r = new Random();
while (tomb.Count < 5)
{
int szam = r.Next(1, 6);
if (!tomb.Contains(szam))
tomb.Add(szam);
}String.Join(", ", tomb.ToArray())
Sőt ha csak kiírod, egyből mehet List<string>-be is.
[ Szerkesztve ]
-
Peter Kiss
őstag
Nem tudom, mi a végcél, de ilyen feladatnál előbb összeszedjük az elemeket, majd random sorrendben kiszedjük őket:
using System;
using System.Collections.Generic;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var listOfNumbers = new List<int>();
var minValue = 1;
var exclusiveMaxValue = 6;
for (var i = minValue; i < exclusiveMaxValue; i++)
{
listOfNumbers.Add(i);
}
var randomized = new int[exclusiveMaxValue - minValue];
var random = new Random();
for (var i = 0; i < exclusiveMaxValue - minValue; i++)
{
var index = random.Next(0, listOfNumbers.Count);
randomized[i] = listOfNumbers[index];
listOfNumbers.RemoveAt(index);
}
/* ... */
}
}
} -
alfa20
senior tag
Köszönöm mind kettőtöknek, sokat segítettetek!
"Az agy olyan, mint az ejtőernyő: csak akkor működik, ha nyitott." (Thomas Dewar)
-
Lacces
őstag
Sziasztok!
Van olyan leírás, ahol leírják lépésről lépésre, hogy hogyan kell beállítani egy windows server 2012-t, ahova lehet publikálni asp.net alkalmazást? (Adatbázis, engédelyek, hogy a lokális gépen futó Visual Studioból lehessen publikálni a szerverre)
Én csak külön-külön próbáltam összeszedni az információt, de az adatbázis sem műkődik a szerveren, távolról sem tudok publikálni...
-
martonx
veterán
-
nuller
újonc
hali sziasztok ki foglalkozik itt c# nyelű progizásak kaptam egy ilyen hibát nem tudna valaki segiteni nagyon fontos lenne : http://i.imgur.com/Gfc06Ha.png?1
by : nuller
-
nuller
újonc
válasz lord.lakli #6626 üzenetére
itt a code : http://hastebin.com/uzewawulix.tex meg tudnád nekem csinálni müködöre vagyis csak a problémát kéne kijavitani az arguments direkt nincs ott mert hosszú előre is köszönöm már jo lenne ha müködne
by : nuller
-
martonx
veterán
Most hülyéskedsz? Debugold már végig azt a pár sort, és nézd meg, hogy hol kapsz null-t, és képzeld ott lesz a hiba.
Abszolút nem biztos, hogy a kóddal van baj, jó eséllyel valami környezeti változó / registry bejegyzés, telepítési útvonal nem lesz jó, ami nem a kód hibája.Én kérek elnézést!
-
nuller
újonc
válasz lord.lakli #6629 üzenetére
átirtam erre a 77 sort : using (RegistryKey key2 = Registry.LocalMachine.OpenSubKey(name, RegistryView.Registry64))
és ezt írja : http://i.imgur.com/1wCxmtj.png?1by : nuller
-
Alexios
veterán
Húha, mennyire új neked a programozás?
Elég egyértelműen leírja amúgy a hibát, a metódus második paramétere más típusú mint amit vár.
Nullreference-t meg korábban valószínűleg azért kapsz mert String str3 = key.GetValue("CurrentVersion")
itt keresed a CurrentVersion kulcsot, de valószínűleg nem talál ilyet, azaz nullal tér vissza, amire meghívod a tostring metódust, de mivel amin meghívod null így exception-t fog dobni -
tototos
őstag
Sziasztok!
Egy mappastruktúrát kell ellenőriznem a merevlemezen, hogy léteziik-e és amik hiányoznak azoakt létrehozni. A struktúrában vannak fájlok és mappák is. Ezt hogy lehet szépen tárolni a kódban?
Köszönöm a segítséget
-
schlott
újonc
Üdv mindenkinek!
Van egy kis problémám. Egy értesítést kezelő programot kell készítenem és nem jövők rá, hogy amikor a for ciklusom eléri a 420 induljon újra a számláló illetve munkásokat is írni kell az adatbázisba a címek mellé és azt is ugratni kéne. Tehát arra lenne szükség,hogy indul a számláló kezdi írni a dátumot ha 420 megtelt először nézze meg hogy van e még munkás ha van azt írja 420-ig ugyan arra a napra ha nincs indul a következő nappal. Eddig jutottam de mint látni nem indul újra a számláló és a munkásokat se jöttem rá hogy-hogy változtassam. Ha valaki tud segíteni előre is köszi.int sum = 0;
string f = dateTimePicker1.Value.ToString();
for (int i = 0; i < dataGridView3.Rows.Count; ++i)
{
sum += Convert.ToInt32(dataGridView3.Rows[i].Cells[20].Value);
foreach (DataRowView s in checkedListBox1.CheckedItems)
{
if (sum <= 420)
{
dataGridView3.Rows[i].Cells[8].Value = f;
dataGridView3.Rows[i].Cells[24].Value = (s[checkedListBox1.ValueMember].ToString());
if (i >= 420)
{
i = 0;
}
}
}
}[ Módosította: Karma ]
-
ubid
senior tag
hm hm.. egy kis gondolat, és egyben kérdé is az okosabbakhoz...
A REF kulcsszóról lenne szó... az nyilván való, hogy value type-ok esetében mi a szerepe illete mi a jelentőssége..
de referencia típusoknál van értelme ?
A fordító engedi... működik... De a ref nélkül is módosul az érték, mivel amúgy is a metódus paraméterében a referencia pointere érkezik..csak épp "value"ként...Tehát van értelme a ref kulcsszónak referencia típus átadása esetén ,
public void Mod(ref RefTipus valami) { ...}
-.-
-
amargo
addikt
“The workdays are long and the weekend is short? Make a turn! Bike every day, bike to work too!”
-
daneel92
tag
Sziasztok!
Pár hete kezdtem el programozni C#ban, és egy olyan algritmust szeretnék írni, ami kiszámolja a Fibonacci sorozat valamely elemét. Így néz ki a kódom:static void Main(string[] args)
{
Console.WriteLine("Írja be, hanyadik tagját szeretné kiszámolni a Fibonacci-sorozatnak!");
int tag = int.Parse(Console.ReadLine());
int[] Fibonacci = new int[tag];
Fibonacci[0] = 1;
Fibonacci[1] = 1;
for (int i = 2; i <= Fibonacci.Length; i++)
{
Fibonacci [i]= Fibonacci[i - 2] + Fibonacci[i - 1];
}
Console.WriteLine(Fibonacci[tag]);
Console.ReadLine();
}Viszont miután már programban megadom az értéket, utána ezt a hibaüzenetet dobja ki: "az index a tömb határain kívülre mutatott"
Hogyan tudnám ezt orvosolni? Mindenképp tömbös módszerrel szeretném kiszámolni, mert már csakazértis
Előre is köszi a válaszokat.
[ Módosította: Karma ]
Asrock B450 Pro4, AMD Ryzen 7 2700 @3.2GHz, Sapphire Radeon RX 5700 XT Pulse 8GB, Chieftec 600W
-
Karma
félisten
válasz daneel92 #6640 üzenetére
Ne akard tömbösen, mert úgy a 10000000000000. elemnél már gondok lesznek, pedig nem szükségszerű.
A hiba oka egyébként egyszerű: az i <= Fibonacci.Length ciklusfeltétel hibás, egyenlő nem lehet, hiszen a tömböt 0..Length-1-ig indexeli a nyelv.
És ha már itt vagyunk, kérlek legközelebb használd a Programkód formázást!
[ Szerkesztve ]
“All nothings are not equal.”
-
sztanozs
veterán
válasz daneel92 #6640 üzenetére
az int[] Fibonacci = new int[tag];
0-tól tag-1-ig hozza létre az tömböt.Persz ezt már Karma is leírta
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
kingabo
őstag
válasz daneel92 #6640 üzenetére
Legközelebb a VS debuggere tud segíteni ennek a megtalálásában: debug menü/exceptions: pipa a clr exceptions sorában a thrown oszlopba. Ezután már csak debuggolnod kell: amikor vmi kivétel következik be akkor megáll a progid futása, DE meg tudod nézni a változók értékeit, nemcsak egy hibát kapsz.
Utána ne felejtsd el a pipát kivenni, mert adott esetben eléggé idegesítő tud lenni, hogy minden kivételt elkap. -
alfa20
senior tag
válasz daneel92 #6640 üzenetére
Én mondjuk kihagynám a tömböt, ha csak a sorozat utolsó értéke kell, akkor az megoldható pár változóval meg egy for ciklussal pl:
static void Main(string[] args)
{
Console.WriteLine("Írja be, hanyadik tagját szeretné kiszámolni a Fibonacci-sorozatnak!");
int elem = int.Parse(Console.ReadLine());
int a = 0, b = 1, c = 1;
for (int i = 2; i < elem; i++)
{
c = a + b;
a = b;
b = c;
}
Console.WriteLine(c);
Console.ReadLine();
}persze azt is meg kell ebben az esetben oldani, ha az 1., 2. elemet kérik be akkor mi legyen.
"Az agy olyan, mint az ejtőernyő: csak akkor működik, ha nyitott." (Thomas Dewar)
-
ubid
senior tag
Hali.
Regex-be elég gyenge vagyok...
Valaki tudna segíteni ?olyan regex kéne, ami a következőt validálja...
"dd.dd.dd...." - tehát egymás után MINDIG két szám áll, amelyekre igaz az, hogy mind a kettő egyszerre nem lehet 0 -tehát ez invalid : 11.22.00 vagy 11.00.22 stb.
A számokat mindig 1 pont választja el egymástól. ilyen sorozatból bármennyi lehet...
lehet olyan eset is amikor csak simán kettő szám van, tehát : 22 például.
A karaktersorozat legvége mindig két szám, tehát .-al nem végződhet...
-.-
-
ubid
senior tag
A regex tökéletes. Abban az online tool-ban.
Viszont C#-ba beillesztve már nem úgy viselkedik
var regex = new Regex(@"^((?:[0-9][1-9]|[1-9][0-9])(?:\.(?:[0-9][1-9]|[1-9][0-9]))*)",RegexOptions.Singleline);
string s = "11.22.33"; //true
string s1 = "11.22.33."; //false
Console.WriteLine(regex.IsMatch(s)); //TRUE
Console.WriteLine(regex.IsMatch(s1)); //TRUE
Console.ReadLine();Mind a kettőre TRUE-t ad... Pedig ugye a második az False
-.-
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Ozeki Kft
Város: Debrecen