Bij een switch statement de cyclus opnieuw laden bij default

Status
Niet open voor verdere reacties.

stevebravo

Gebruiker
Lid geworden
16 jan 2010
Berichten
156
Ik gebruik deze code om textbestanden te showen in de console..
ik gebruik een switchstatement, waarbij ik de default gebruik om ervoor te zorgen dat er opnieuw J of N ingevuld moet worden..

Hoe pak ik dat aan?

ik zat zelf aan goto te denken of een 3e case..?

Code:
static void Main(string[] args)
        {
            string bestandsLocatie = @"D:\locatie\txtbestanden";
            string[] alleBestanden = Directory.GetFiles(bestandsLocatie, "*.txt");
            string JN;
            int exitCode = 0;

            Console.WriteLine("Bent u klaar om de textbestanden te transporteren naar de access database J/N?");
            JN = Console.ReadLine();

            switch (JN.ToUpper())
            {
                case "J":
                    
                        foreach (string Bestand in alleBestanden)
                        {
                            StreamReader leesBestanden = new StreamReader(Bestand);

                            Console.WriteLine(leesBestanden.ReadToEnd());
                        }
                        break;

                case "N":
                    Environment.Exit(exitCode);
                    break;
                
                default:
                    Console.WriteLine("J = Ja, N = Nee.");
                    
                    return;
            }
 
Iets zoals dit?

PHP:
        static void Main(string[] args)
        {
            string bestandsLocatie = @"D:\locatie\txtbestanden";
            string[] alleBestanden = Directory.GetFiles(bestandsLocatie, "*.txt");
            string JN;
            int exitCode = 0;
            Console.WriteLine("Bent u klaar om de textbestanden te transporteren naar de access database J/N?");
            opnieuw:
            JN = Console.ReadLine();

            switch (JN.ToUpper())
            {
                case "J":

                    foreach (string Bestand in alleBestanden)
                    {
                        StreamReader leesBestanden = new StreamReader(Bestand);

                        Console.WriteLine(leesBestanden.ReadToEnd());
                    }
                    break;

                case "N":
                    Environment.Exit(exitCode);
                    break;

                default:
                    Console.WriteLine("Vul J of N opnieuw in:");
                    goto opnieuw;
            }
        }
 
Ik zou het niet weten, dit is het eerst dat bij me opkwam.
Wat je ook kan doen is Main(args) opnieuw laten aanroepen en met een bool checken of hij al een eerste keer langs de code is gezoeft.
Zoja, dan vraag je of de persoon opnieuw J of N wilt invoeren.
 
Ik zou dit probleem anders aanpakken. Een goto statement gebruiken is niet zo goed voor de leesbaarheid van je code.

Code:
do {

Console.WriteLine("Bent u klaar om de textbestanden te transporteren naar de access database J/N?");

JN = Console.ReadLine();

} while (JN != "J" && JN != "N");

if (JN = "J"){
....}

else { //JN moet dus wel "N" zijn
...}
 
Ik zou dit probleem anders aanpakken. Een goto statement gebruiken is niet zo goed voor de leesbaarheid van je code.

Code:
do {

Console.WriteLine("Bent u klaar om de textbestanden te transporteren naar de access database J/N?");

JN = Console.ReadLine();

} while (JN != "J" && JN != "N");

if (JN = "J"){
....}

else { //JN moet dus wel "N" zijn
...}

Erg bedankt voor je input, maar om eerlijk te zijn vind ik deze code niet echt heel mooi eruit zien.. ik probeer het toch nog even via de switch statement
 
Erg bedankt voor je input, maar om eerlijk te zijn vind ik deze code niet echt heel mooi eruit zien.. ik probeer het toch nog even via de switch statement

Persoonlijk vind ik in dit geval de do-while beter (en netter) dan de switch. Waarom niet een combi van beide?
Je maakt een method aan waarin je de switch+case zet. In de default-case gooi je een exception op (of iets anders) en in de do-while check je op deze waarde.
Is die false dan blijf je in je while-lus, zo niet dan stap je er uit. Dus:
[cpp]
static void CheckInput ()
{
switch ()
{
case "J":
//Do some fancy stuff.
break;

case "N":
//More fancy stuff.
break;

default:
//Only J/N is allowed
throw new Exception("Only J/N");
}
}

Main()
{
do
{
try {
CheckInput();
break;
} catch (Exception) { }
} while (true);
}
[/cpp]

Nu is dit vrij basic, maar op deze manier kan je toch gebruik blijven maken van je switch (in een lusje).
 
Persoonlijk vind ik in dit geval de do-while beter (en netter) dan de switch. Waarom niet een combi van beide?
Je maakt een method aan waarin je de switch+case zet. In de default-case gooi je een exception op (of iets anders) en in de do-while check je op deze waarde.
Is die false dan blijf je in je while-lus, zo niet dan stap je er uit. Dus:
[cpp]
static void CheckInput ()
{
switch ()
{
case "J":
//Do some fancy stuff.
break;

case "N":
//More fancy stuff.
break;

default:
//Only J/N is allowed
throw new Exception("Only J/N");
}
}

Main()
{
do
{
try {
CheckInput();
break;
} catch (Exception) { }
} while (true);
}
[/cpp]

Nu is dit vrij basic, maar op deze manier kan je toch gebruik blijven maken van je switch (in een lusje).

Ook jij erg bedankt!!

Vind je dat ik redelijk goed op weg was? Want mijn eindresultaat moet uiteindelijk zijn dat in een bepaalde map met ongeveer 200 textbestandjes dmv substrings informatie verplaats moet worden naar een access/excel database.
 
Ook jij erg bedankt!!

Vind je dat ik redelijk goed op weg was? Want mijn eindresultaat moet uiteindelijk zijn dat in een bepaalde map met ongeveer 200 textbestandjes dmv substrings informatie verplaats moet worden naar een access/excel database.

Ik weet niet hoe jij er over denkt, maar ik zou (als gebruiker) geen zin hebben om ongeveer 200 keer op J/N te drukken.
Als het maar 1x hoeft (J/N) en vervolgens worden alle bestanden omgezet/geimporteerd, dan zou ik de hele J/N verwijderen: je start het programma toch al op om de bestanden te importeren? Dus de keus heb je al gemaakt.

Verder zou ik per bestand aangeven of het wel/niet gelukt is, en stoppen (als dat gewenst is) als het importeren van een bestand niet gelukt is.

Tip: ik weet niet hoe je programmeervaardigheden zijn, maar ik zou alles in klassen gaan stoppen.
 
Ik weet niet hoe jij er over denkt, maar ik zou (als gebruiker) geen zin hebben om ongeveer 200 keer op J/N te drukken.
Als het maar 1x hoeft (J/N) en vervolgens worden alle bestanden omgezet/geimporteerd, dan zou ik de hele J/N verwijderen: je start het programma toch al op om de bestanden te importeren? Dus de keus heb je al gemaakt.

Verder zou ik per bestand aangeven of het wel/niet gelukt is, en stoppen (als dat gewenst is) als het importeren van een bestand niet gelukt is.

Tip: ik weet niet hoe je programmeervaardigheden zijn, maar ik zou alles in klassen gaan stoppen.

nee, met J moet juist alle bestanden in een keer verwerkt worden die in de map zitten.....

wat betreft je tip.. opzich snap ik de code altijd wanneer ik het zie, maar heb ik moeite om uit het niets iets te schrijven.

Als voorbeeld wil ik altijd gebruiken: Je kan van een bepaalde taal (van een land) bijvoorbeeld wel alle woorden kennen.. maar de grammatica beheers ik nog onvoldoende zal ik maar zeggen..
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan