arrow-left

All pages
gitbookPowered by GitBook
1 of 6

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Strings samenvoegen

hashtag
Strings samenvoegen

Je kan strings en variabelen samenvoegen tot een nieuwe string op verschillende manieren:

  • +-operator

  • $ string interpolation

  • Of de oude manier: String.Format()

circle-info

In deze cursus prefereren we manier 2, de string interpolatie. Dit is de meest moderne aanpak.

hashtag
In dit hoofdstuk

We gaan van volgende informatie uit:

  • Stel dat je 2 variabelen hebt int age=13 en string name="Finkelstein".

  • We willen de inhoud van deze variabelen samenvoegen in een nieuwe string result die zal bestaan uit de tekst:

    Ik ben Finkelstein en ik ben 13 jaar oud.

Volgende 3 manieren tonen hoe je steeds tot voorgaande string zal komen.

hashtag
Manier 1: String samenvoegen met de +-operator

Je kan string en variabelen eenvoudig bij elkaar 'optellen'. Ze worden dan achter elkaar geplakt als het ware.

Let er op dat je tussen de aanhalingsteken (binnen de strings) spaties zet indien je het volgende deel niet tegen het vorige stringstuk wilt 'plakken'.

hashtag
Manier 2: String interpolation met $

In de oude dagen van C# gebruikten we String.Format() (zie hieronder) om meerdere strings en variabelen samen te voegen tot één string. Nu kan dat met string interpolation waarbij we het $-teken gebruiken.

Door het $-teken VOOR de string te plaatsen geef je aan dat alle delen in de string die tussen accolades staan { } als code mogen beschouwd worden. Een voorbeeld maakt dit duidelijk:

In dit geval zal dus de inhoud van de variabele name tussen de string op de plek waar nu {name} staat geplaatst worden. Idem voor age. Zoals je kan zien is dit veel meer leesbare code dan de eerste manier.

hashtag
Berekeningen doen bij string interpolatie

Je mag eender welke expressie tussen de accolades zetten bij string interpolation, denk maar aan:

Alle expressies tussen de accolades zullen eerst uitgevoerd worden voor ze tussen de string worden geplaatst. De uitvoer wordt nu dus: Ik ben Finkelstein en ik ben 17 jaar oud.

Eender welke expressie is toegelaten, dus je kan ook complexe berekeningen of zelfs andere methoden aanroepen:

hashtag
Mooier formatteren

Zowel bij manier string interpolation (manier 2) als de manier hierna kan je ook bepalen hoe de te tonen variabelen en expressies juist weergegeven moeten worden. Je geeft dit aan door na de expressie, binnen de accolades, een dubbelpunt te plaatsen gevolgd door de manier waarop moet geformatteerd worden:

Wil je bijvoorbeeld een kommagetal tonen met maar 2 cijfers na de komma dan schrijf je:

Nog enkele nuttige vormen:

  • D5: geheel getal bestaande uit 5 cijfers (123 wordt 00123) (werkt enkel op gehele getallen!)

  • E2: wetenschappelijke notatie met 2 cijfers precisie (12000000 wordt 1,20E+007)

Alle format specifiers staan .

hashtag
Manier 3: String.Format()

String interpolatie met het $-teken is een nieuwe C# aanwinst. Je zal echter nog veel documentatie en online code tegenkomen die nog met String.Format werkt (ook zijn er nog zaken waar het te prefereren is om String.Format te gebruiken i.p.v. 1 van vorige manieren). Om die reden bespreken we dit nog in deze cursus.

String.Format is een ingebouwde methode die string-interpolatie toe laat op een iets minder intuïtieve manier:

Het getal tussen de accolades geeft aan de hoeveelste parameter na de string hier in de plaats moet gezet worden (0= de eerste, 1= de tweede, enz).

Volgende code zal een ander resultaat geven:

Namelijk: Ik ben 13 en ik ben 13 jaar oud.

circle-info

Wens je meer informatie over string.Format, kijk dan .

C: geldbedrag (12,34 wordt € 12,34: teken van valuta afhankelijk van instellingen pc)
hier opgelijstarrow-up-right
hierarrow-up-right
string result= "Ik ben "+ name + " en ik ben "+ age+ " jaar oud.";
string result= $"Ik ben {name} en ik ben {age} jaar oud.";
string result= $"Ik ben {name} en ik ben {age+4} jaar oud.";
string result= $"Ik ben {age*age+(3%2)} jaar oud.";
double number = 12.345;
Console.WriteLine($"{number:F2}");
string result= String.Format("Ik ben {0} en ik ben {1} jaar oud.",name,age);
string result= String.Format("Ik ben {1} en ik ben {1} jaar oud.",name,age);

Oefeningen

hashtag
Oefening: H2-string-interpolation

hashtag
Leerdoelen

  • gebruik van string interpolation

hashtag
Functionele analyse

Oefening H1-maaltafels en H1-ruimte dienen we te herschrijven volgens de principes van string interpolation.

hashtag
Technische analyse

hashtag
UI

console applicatie

hashtag
voorbeeldinteractie(s)

Zie oefening H1-maaltafels en H1-ruimte.

hashtag
Technische hulp

hashtag
Programmaverloop

Pas string interpolatie mbv $ (manier 2) toe.

hashtag
Testscenario's

  • Zie oefening H1-maaltafels en H1-ruimte.

hashtag
Ondersteunend materiaal

Hou het voorlopig op de cursus.

hashtag
Oefening: H2-systeem-informatie

hashtag
Leerdoelen

  • gebruik van string interpolation

  • gebruik van Environment class

hashtag
Functionele analyse

Maak een applicatie die de belangrijkste computer-informatie (geheugen, etc) aan de gebruiker toont.

hashtag
Technische analyse

hashtag
UI

console applicatie

hashtag
voorbeeldinteractie(s)

hashtag
Technische hulp

hashtag
Programmaverloop

Pas string interpolatie mbv $ (manier 2) toe. De computerinformatie kan je verkrijgen mbv de Environment-klasse. Hier enkele voorbeelden (kijk zelf of er nog nuttige properties over je computer in staan en voorzie deze ook binnen jouw code):

WorkingSet geeft terug hoeveel geheugen het programma van windows toegewezen krijgt. Als je dus op 'run' klikt om je code te runnen dan zal dit programma geheugen krijgen en via WorkingSet kan het programma dus zelf zien hoeveel het krijgt. (wat een vreemde lange zin).

Zoals je ziet wordt het geheugen in bytes teruggegeven. Zorg ervoor dat het geheugen steeds in mega of gigabytes op het scherm wordt getoond.

Formatteer de informatie met behulp van de $-notatie zodat deze deftig getoond worden en de gebruiker snel de belangrijke informatie over z'n systeem te zien krijgt.

hashtag
Testscenario's

  • wat gebeurt er wanneer je het datatype string zou wijzigen in int?

hashtag
Ondersteunend materiaal

Hou het voorlopig op de cursus.

hashtag
Oefening: H2-weerstandberekenaar-deel1

hashtag
Leerdoelen

  • gebruik van math class

hashtag
Functionele analyse

Stel dat je in het labo een weerstand vastneemt en je kent de kleurcodes van de streepjes wel, maar niet hoe je die kunt omzetten naar de effectieve weerstandswaarde. In dit programma kunnen we de gebruiker helpen.

(Bron afbeelding: )

hashtag
Technische analyse

hashtag
UI

console applicatie

hashtag
voorbeeldinteractie(s)

hashtag
Technische hulp

hashtag
Programmaverloop

Maak een programma dat de weerstandwaarde berekent gebaseerd op:

  • Ring 1: die de tientallen voorstelt

  • Ring 2: die de eenheden voorstel

  • Ring 3: die de exponent (10 tot de macht) voorstelt. (tip:Math.Pow(10,ring3))

Gebruik drie variabelen van het type int. (we veronderstellen dus dat de gebruiker de kleurcode heeft omgezet naar een getal en dat toewijst aan de variabele)

Test dat je "formule/berekening" klopt om gebaseerd op 2 (of 3) ringen de weerstandswaarde te berekenen.

hashtag
Testscenario's

  • wat gebeurt er wanneer je een hoger getal dan 9 zou invoeren?

hashtag
Ondersteunend materiaal

Hou het voorlopig op de cursus.

hashtag
Oefening: H2-weerstandberekenaar-deel2

hashtag
Leerdoelen

  • gebruik van UNICODE

hashtag
Functionele analyse

Zie deel 1.

hashtag
Technische hulp

hashtag
Programmaverloop

Zie deel 1 en plaats het geheel in een mooie UNICODE-tabel.

Hier enkele nuttige tekens:

Gebruik $-string interpolatie om de informatie in de tabel te tonen zodat je volgende uitvoer kunt genereren:

of:

hashtag
Testscenario's

  • wat gebeurt er wanneer je een waarde van circle 1, 2 of 3 uit meer dan twee cijfers bestaat?

hashtag
Ondersteunend materiaal

Hou het voorlopig op de cursus.

hashtag
Oefening: H2-shell-starter

hashtag
Leerdoelen

  • gebruik van Process.Start()

  • verwerken van uitvoer

hashtag
Functionele analyse

Je kan de output van een Process.Start() programma naar je console scherm sturen. Dit vereist wat meer code. Volgende voorbeeld zal de output van het commando ipconfig /all op het scherm tonen:

Onder macOS heb je een ander commando nodig. Gebruik daar "ifconfig" voor het (uitvoerbaar) bestand en geef een lege string mee voor de argumenten.

hashtag
Technische hulp

hashtag
Programmaverloop

Maak enkele kleine C# programma's die bepaalde shell-commando's zullen uitvoeren en die de uitvoer in hoofdletters weergeven in plaats van in de gewone vorm. Enkele nuttige shell-commando's in de netwerk-sfeer zijn bijvoorbeeld:

hashtag
Testscenario's

  • Probeer van bovenstaande programma's al die, die compatibel zijn met je besturingssysteem.

hashtag
Ondersteunend materiaal

Hou het voorlopig op de cursus.

Uitbreidingsoefeningen

Volgende oefeningen zijn al iets stevigers. Ze gebruiken concepten die nog niet aan bod gekomen zijn in de cursus en je wordt niet verondersteld ze te kunnen maken aan het begin van het semester. Je kan ze wel bekijken als je eerder al geprogrammeerd hebt of wanneer je aan het studeren bent voor het examen.

hashtag
Oefening: H2-systeem-informatie-pro

hashtag
Leerdoelen

  • gebruik van string interpolation

  • gebruik van System.IO

hashtag
Functionele analyse

Je moet informatie over de harde schijven op je systeem weergeven.

hashtag
Technische analyse

hashtag
UI

console applicatie

hashtag
voorbeeldinteractie(s)

hashtag
Technische hulp

hashtag
Programmaverloop

Ook informatie over de harde schijven kan je verkrijgen (in bits). Dit vereist wel dat je bovenaan je programma volgende lijn bijschrijft: using System.IO.

Vervolgens kan je in je programma schrijven:

De lijn met using is om aan te geven dat we iets uit de System.IO bibliotheek nodig hebben, namelijk DriveInfo. Schrijven we dat niet dan moeten we in onze code DriveInfo aanroepen met z'n volledige path: System.IO.DriveInfo....

De 0 tussen rechte haakjes is de index van welke schijf je informatie wenst. 0 is de eerste harde schijf, 1 de tweede, enzovoort. (Ter info: dit zijn arrays, zie later)

Vraag aan de gebruiker het nummer van de harde schijf waar meer informatie over moet getoond worden.

Opgelet: sta toe dat de gebruiker 1 voor de eerste harde schijf mag gebruiken, 2 voor de tweede, enzovoort. Je zal dus in code nog manueel 1 moeten aftrekken van de invoer van de gebruiken. Bv:

hashtag
Testscenario's

  • wat gebeurt er wanneer je het datatype int zou wijzigen in string?

hashtag
Ondersteunend materiaal

Hou het voorlopig op de cursus.

hashtag
Oefening: H2-weerstandsberekendaar-deel3

Deze bouwt voort op H2-weerstandsberekendaar-deel2. Kan je afhankelijk van de ringwaarde het getal in de tabel in de juiste kleur zetten conform de weerstandskleuren? (tip: je zal Write en if moeten leren gebruiken)

Unicode tonen

hashtag
Unicode tonen

Niets is zo leuk als de vreemdste tekens op het scherm tonen. In oude console-games werden deze tekens vaak gebruikt om complexe tekeningen op het scherm te tonen: om je filmpjes nog cooler te maken leggen we daarom uit hoe je dit kan doen, gebruikmakende van je kennis over converteren.

Dwarven fortress

hashtag
Unicode karakters tonen

Zonder een uitleg te geven over het verschil tussen ASCII en Unicode is het vooral belangrijk te weten dat je best met Unicode werkt.

  1. Zoek het teken(s) dat je nodig hebt in een Unicode-tabel ()

  2. Plaats bovenaan je Main: Console.OutputEncoding = System.Text.Encoding.UTF8;

  3. Je kan nu op 2 manieren dit teken in console plaatsen

hashtag
Manier 1: copy/paste

Kopieer het karakter zelf en plaats het in je code waar je het nodig hebt, bijvoorbeeld:

hashtag
Manier 2: hexadecimale code casten naar char

Noteer de hexadecimale code van het karakter dat in de tabel staat.

In dit geval is de code 0x02e7.

Om dit teken te tonen schrijf je dan:

In C# schrijf je hexadecimale getallen als volgt als je ze rechstreeks in een string wilt plaatsen: \u02e7

Wil je dus bovenstaande teken schrijven dan kan dan ook als volgt:

hashtag
Ascii-art tonen

Soms zou je multiline ASCII-art willen tonen in je C# applicatie. Dit kan je eenvoudig oplossen door gebruik te maken van het @ teken voor een string.

Stel dat je een toffe titel of tekening via een van volgende sites hebt gemaakt:

Je kan het resultaat eenvoudig naar je klembord kopiëren en vervolgens in je C#-code integraal copy pasten als literal voor een string op voorwaarde dat je het laat voorafgaan door @" en uiteraard eindigt met ";.

Bijvoorbeeld:

Vrije ruimte op jouw c-schijf: 10803744768
Totale ruimte van jouw c-schijf: 159671906304

********************************************************************************
Geef met nummer 1 t/m 2 aan over welke harde schijf van jouw pc je info wenst: 1
De vrije ruimte van C:\ is 108 Gb
long cDriveInBytes = DriveInfo.GetDrives()[0].AvailableFreeSpace;  
long totalSize = DriveInfo.GetDrives()[0].TotalSize;
int input= Convert.ToInt32(Console.ReadLine()) - 1 ;
long totalSize = DriveInfo.GetDrives()[input].TotalSize;
https://www.esdsite.nlarrow-up-right
deze is handigarrow-up-right
Asciiflow.Comarrow-up-right
Ascii title generatorarrow-up-right
Ascii generatorarrow-up-right
Uw computer heeft een 64-bit besturingssysteem: True
De naam van uw pc is: LAPTOP
Uw pc heeft 4 processorkernen.
ikke is uw gebruikersnaam.
Je gebruikt 11 megabytes aan geheugen
bool is64bit = Environment.Is64BitOperatingSystem;
string pcName = Environment.MachineName;
int procCount = Environment.ProcessorCount;
string userName = Environment.UserName;
long memory = Environment.WorkingSet; //zal ongeveer 11 MB teruggeven.
Geef de waarde (uitgedrukt in een getal van 0 tot 9) van de eerste ring: 2
Geef de waarde (uitgedrukt in een getal van 0 tot 9) van de tweede ring: 2
Geef de waarde (uitgedrukt in een getal van -2 tot 7) van de derde ring (exponent): 2
Resultaat is 2200 Ohm, ofwel 22x100.
╔═══════════════╦═══════════════╗
║ 
╟───────────────╫───────────────╢
║ 
╚═══════════════╩═══════════════╝
System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo.FileName = "ipconfig";
process.StartInfo.Arguments = "/all"; 
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.Start(); //start process

// Read the output (or the error)
string output = process.StandardOutput.ReadToEnd();
Console.WriteLine(output);
string err = process.StandardError.ReadToEnd();
Console.WriteLine(err);
//Continue
Console.WriteLine("Klaar");
hostname
arp -a
getmac (enkel onder Windows)
nslookup google.com
Console.WriteLine("˧");
char blokje = (char)0x02e7;
Console.WriteLine(blokje);
Console.WriteLine("\u02e7");
string myname=@"
___________________   
\__    ___/\______ \  
  |    |    |    |  \ 
  |    |    |    `   \
  |____|   /_______  /
                   \/ ";

Console.WriteLine(myname);

H2: Tekst in code

Strings en chars

hashtag
Char

Een enkel karakter (cijfer, letter, leesteken, etc.) als 'tekst' opslaan kan je doen door het char-type te gebruiken. Zo kan je bijvoorbeeld een enkel karakter als volgt tonen:

Het is belangrijk dat je de apostrof (' ) niet vergeet voor en na het karakter dat je wenst op te slaan daar dit de literal voorstelling van char-literals is (zie ook ).

Je kan eender welk in een char bewaren, namelijk letters, cijfers en speciale tekens zoals %, $, *, #, etc. Merk dus op dat volgende lijn: char eenGetal = '7'; weliswaar een getal als teken opslaat, maar dat intern de compiler deze variabele steeds als een character zal gebruiken. Als je dit cijfer zou willen gebruiken als effectief cijfer om wiskundige bewerkingen op uit te voeren, dan zal je dit eerst moeten converteren naar een getal (zie ).

hashtag
String

Een string is een reeks van 0, 1 of meerdere char-elementen, zoals je ook kan zien als je even met je muis boven een string keyword hovert in je code:

hashtag
Strings declareren

Merk op dat we bij een string literal gebruik maken van aanhalingstekens (") terwijl bij chars we een apostrof gebruiken ('). Dit is de manier om een string van een char te onderscheiden.

Volgende code geeft dus drie keer het cijfer 1 onder elkaar op het scherm, maar de eerste keer behelst het een char (enkelvoudig teken), dan een een string (reeks van tekens) en dan een int (effectief getal):

De output van dit programma zal dan zijn:

Fout gebruik van strings en chars zal code geven die niet zal gecompileerd worden:

  1. In de eerste toekenning proberen we dus een literal van het type string toe te kennen een variabele van het type char.

  2. In de tweede toekenning proberen we een literal van het type char toe te kennen een variabele van het type string.

  3. In de laatste toekenning proberen we een literal van het type char toe te kennen aan een variabele van het type

char eenLetter = 'X';
Console.WriteLine("eenLetter=" + eenLetter);
int
.
hier
UNICODE-tekenarrow-up-right
Convert en Casting
char eenKarakter = '1'; 
string eenString = "1"; 
int eenGetal = 1;

Console.WriteLine(eenKarakter);
Console.WriteLine(eenString);
Console.WriteLine(eenGetal);
1
1
1
char eenKarakter = "1"; //fout
string eenString = '1'; //fout
int eenGetal = '1'; //fout