Hjälp med IF-sats eller något annat

Permalänk

Hjälp med IF-sats eller något annat

Hej!

Vet inte riktigt hur jag skall förklara detta på bästa sätt, men jag ger det ett försök!
Detta är i PowerShell, så även om ni har en lösning i C# så fungerar det utan problem.

För tillfället har jag fem olika funktioner. Varje funktion tar ett värde från en textbox och gör lite olika saker.

Problemet jag har är följande:
Låt oss säga att textbox1 har ett värde, då skall funktion 1 utföras men inte de övriga fyra.
Samma om textbox2 har ett värde, då skall funktion 2 utföras, men inte de övriga fyra.

Har textbox 1, 3 och 5 ett värde, så skall funktion 1, 3 och 5 utföras, men inte funktion 2 och 4.

Detta går att lösa med en IF-sats och ELSEIF, men det blir så jäkla mycket kod och sannolikheten att något blir fel är väldigt stor.

Finns det något annat sätt att lösa det på?

Har som exempel följande kod:

if(($Box1.text) -and !($Box2.Text) -and !($Box3.Text) -and !($Box4.Text) -and !($Box5.Text)) { Function1 $objCompleteForm.Add_Shown({$objCompleteForm.Activate()}) [void] $objCompleteForm.ShowDialog() } elseif(!($Box1.text) -and ($Box2.Text) -and !($Box3.Text) -and !($Box4.Text) -and !($Box5.Text)) { Function2 $objCompleteForm.Add_Shown({$objCompleteForm.Activate()}) [void] $objCompleteForm.ShowDialog()

Kan tillägga att detta inte är för något skolarbete eller liknande

Permalänk
Medlem

Har inte jobbat med just C# eller powershell men låter som en bra ide med en Switch Case sats?

Visa signatur

Dator: Ryzen 5900X, 32GB RAM, RTX3080
Ljud: SMSL SU-8, HDVA600, HD800.

Permalänk
Medlem

Om testbox 2, 3 och 4 har ett värde skall då funktion 2, 3, 4 utföras?

Visa signatur

“When a clown moves into a palace he doesn’t become a king, instead the palace becomes a circus.”

Permalänk
99:e percentilen

Om jag förstår frågan rätt kanske följande pseudokod kan vara till nytta:

if (textbox1.hasValue()) { function1(); } if (textbox2.hasValue()) { function2(); } if (textbox3.hasValue()) { function3(); } if (textbox4.hasValue()) { function4(); } if (textbox5.hasValue()) { function5(); }

Om du har väldigt många textboxar med tillhörande funktioner kanske du kan lägga textboxarna och funktionerna i en tvådimensionell array och loopa igenom den.

Visa signatur

Skrivet med hjälp av Better SweClockers

Permalänk
Skrivet av bjinko:

Har inte jobbat med just C# eller powershell men låter som en bra ide med en Switch Case sats?

Den har metoden har jag nog missat, skall se om jag kan utnyttja den på något sätt!

Skrivet av MarkSix:

Om testbox 2, 3 och 4 har ett värde skall då funktion 2, 3, 4 utföras?

Det stämmer.

Skrivet av Alling:

Om jag förstår frågan rätt kanske följande pseudokod kan vara till nytta:

if (textbox1.hasValue()) { function1(); } if (textbox2.hasValue()) { function2(); } if (textbox3.hasValue()) { function3(); } if (textbox4.hasValue()) { function4(); } if (textbox5.hasValue()) { function5(); }

Om du har väldigt många textboxar med tillhörande funktioner kanske du kan lägga textboxarna och funktionerna i en tvådimensionell array och loopa igenom den.

Det är totalt fem stycken som gäller, så det blir en del kod av det hela det blir det...
Tvådimensionell array har jag inte den blekaste aning om vad det är för något, men jag skall definitivt kolla upp det!

Satt i tankarna på om man skulle krångla till det med if-satser i andra if-satser, men det känns som om det kommer att orsaka mer problem än vad det löser...

Permalänk
Medlem

Ifall de olika funktionerna inte påverkar varandra på något sätt så fungerar Allings exempelkod utmärkt.

Visa signatur

i7 4770k 4.2 GHz delid | Asus Z97-E | 32GB 2133 MHz 12-13-12-37 1T DDR3 | Radeon 6600 | KC2500 2 TB + 840 EVO 1TB | Corsair AX860 Platinum | Define R4

"Once you go FLAC, you never go back!"

Permalänk
Skrivet av DarkAlf:

Ifall de olika funktionerna inte påverkar varandra på något sätt så fungerar Allings exempelkod utmärkt.

Nope, de är helt fristående. De gör i princip samma sak, fast skickar och skriver olika värden till systemet.

Skall testa och se hur det fungerar! Ser betydligt enklare ut än mitt tappra försök som fungerade toppen då jag bara hade två funktioner

Permalänk
Medlem
Skrivet av Psy_Lover:

Nope, de är helt fristående. De gör i princip samma sak, fast skickar och skriver olika värden till systemet.

Skall testa och se hur det fungerar! Ser betydligt enklare ut än mitt tappra försök som fungerade toppen då jag bara hade två funktioner

Jag förstår hur du tänkt men du har krånglat till problemet. Vad du gör är att anropa funktion1 om text1 har ett värde samtidigt som textbox2..5 INTE har ett värde, och så vidare.

Du behöver inte säkerställa att övriga textboxar är tomma om det du vill göra är att anropa funktionX när textboxX har ett värde.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
99:e percentilen
Skrivet av Psy_Lover:

Det är totalt fem stycken som gäller, så det blir en del kod av det hela det blir det...

Om jag förstod frågan rätt borde det inte behövas någon mer kod än den jag postade.

Måste kodstycket

$objCompleteForm.Add_Shown({$objCompleteForm.Activate()}) [void] $objCompleteForm.ShowDialog()

ligga i varje if-sats? Räcker det inte att lägga det en enda gång efter alla if-satser?

Citat:

Tvådimensionell array har jag inte den blekaste aning om vad det är för något, men jag skall definitivt kolla upp det!

En tvådimensionell array är en array av arrayer. Detta är en tvådimensionell array i JavaScript:

var myArray = [ ["Andreas", "Dimestam"], ["Jacob", "Hugosson"], ["Edin", "Mehinovic"], ["Jonas", "Thörnqvist"], ["Emil", "Åkered"] ];

Var och en av de oranga kodsnuttarna är en egen array som utgör en post i den yttre arrayen. Min tanke var att ersätta varje förnamn i min exempelarray med en av dina textboxar och motsvarande efternamn med funktionen som hör ihop med respektive textbox:

var textboxes = [ [textbox1, function1], [textbox2, function2], [textbox3, function3], [textbox4, function4], [textbox5, function5] ];

Detta är dock som sagt JavaScript.

Felaktigt kommatecken borttaget.
Visa signatur

Skrivet med hjälp av Better SweClockers

Permalänk
Skrivet av Alling:

Om jag förstod frågan rätt borde det inte behövas någon mer kod än den jag postade.

Måste kodstycket

$objCompleteForm.Add_Shown({$objCompleteForm.Activate()}) [void] $objCompleteForm.ShowDialog()

ligga i varje if-sats? Räcker det inte att lägga det en enda gång efter alla if-satser?

En tvådimensionell array är en array av arrayer. Detta är en tvådimensionell array i JavaScript:

var myArray = [ ["Andreas", "Dimestam"], ["Jacob", "Hugosson"], ["Edin", "Mehinovic"], ["Jonas", "Thörnqvist"], ["Emil", "Åkered"] ];

Var och en av de oranga kodsnuttarna är en egen array som utgör en post i den yttre arrayen. Min tanke var att ersätta varje förnamn i min exempelarray med en av dina textboxar och motsvarande efternamn med funktionen som hör ihop med respektive textbox:

var textboxes = [ [textbox1, function1], [textbox2, function2], [textbox3, function3], [textbox4, function4], [textbox5, function5], ];

Detta är dock som sagt JavaScript.

Tack för hjälpen!

Det fungerade utmärkt med det lilla stycket kod istället för det jag hade krånglat till!
Använder i princip PowerShell endast för automatisering av olika funktioner i SCCM, men nu testar jag lite andra saker också.

Känner att kunskaperna inom kodning försvunnit lite de senaste tio åren så får ta och fräscha upp dem lite, tänket finns där, men utförandet är en helt annan femma!

Permalänk
Medlem

Ett interface där dom 5 fälten är representerade av varsin klass som alla ärver samma funktion (en i interfacet) men som gör olika saker?

Visa signatur

ASUS ROG Strix B650E-F Gaming WIFI | 2 TB Kingston Fury M.2 NVMe SSD | 32 GB Kingston DDR5 | Rysen 7 7800x3D | ASUS GeForce RTX 4070 12 GB | Fractal Design North

Permalänk
Skrivet av Dakkie:

Ett interface där dom 5 fälten är representerade av varsin klass som alla ärver samma funktion (en i interfacet) men som gör olika saker?

Och där blev det överkurs ^^
tyvärr så blir det inte mycket mindre kod i detta läget tror jag, då jag istället kommer att behöva dela upp det i ett flertal filer istället för att ha allt i samma .ps1 fil.

Klasser har jag bara tittat som hastigast på, jag ser meningen med dem, men som sagt, det blir svårt att implementera i detta läget.

Permalänk
Medlem
Skrivet av Psy_Lover:

Och där blev det överkurs ^^
tyvärr så blir det inte mycket mindre kod i detta läget tror jag, då jag istället kommer att behöva dela upp det i ett flertal filer istället för att ha allt i samma .ps1 fil.

Klasser har jag bara tittat som hastigast på, jag ser meningen med dem, men som sagt, det blir svårt att implementera i detta läget.

Ifall du inte ens behärskar klasser så ja, då är detta överkurs för dig. Men ligg i!

Det kan bli problem och oftast väldigt mycket likadan, tråkig och klumpig kod med switch-statements. Ifall man istället gör ett interface som alla ärver så kan man göra det smidigare. ett exempel:

Du har 2 object som symboliserar en triangel och de andra en kub.

Du vill ta reda på arena. Du får du göra en switchsats som först kollar ifall det är en kub eller en trekant och sedan gör beräkningen åt dig.

Mede tt interface så gör du ett interface som eheter t.ex "shape". Sedan gör du två klasser som heter kub och trekant som implementerar detta interfacet.
Nu har bägge klasserna varsin version av funktionen area som du kan implementera hur du vill. Sedan callar du bara shape1.area(); för att få arean istället för att göra switchen. Blir "snyggare" och lättare kod att läsa med denna implementationen (enligt mig). Dock finns det för och nackdelar med bägge approacherna.

Hoppas du flörstod lite iaf.

Visa signatur

ASUS ROG Strix B650E-F Gaming WIFI | 2 TB Kingston Fury M.2 NVMe SSD | 32 GB Kingston DDR5 | Rysen 7 7800x3D | ASUS GeForce RTX 4070 12 GB | Fractal Design North