Följ Black Week på SweClockers

Problem med utskrvning till en fil.

Permalänk

Problem med utskrvning till en fil.

Hej jag är nästan klar med en här uppgiften där man ska sortera olika säljare beroende på hur många artiklar de har sålt men man ska även skriva ut resultatet till en fil och jag vet inte vad för fil jag ska ange. I uppgiftens beskrivning står det

"Resultatet ska visas både på skärmen och skrivas till en fil.
Ange endast filnamnet då du definierar filen. Alltså ange inte någon sökväg. Då hamnar filen
där .exe-filen ligger vilket ju är praktiskt."

Borde jag skapa en ny text-fil som det sedan skrivs till?

Här kommer koden.

namespace inlämningsuppgift2
{

class Program
{

//Huvudklass
class Försäljare
{
private string namn;
private string personnummer;
private string distrikt;
private int antalsåldaartiklar;

//Ett fält med dessa variabler som enheter.
public Försäljare(string namn, string personunummer, string distrikt, int antalsåldaartiklar)
{
this.namn = namn;
this.personnummer = personunummer;
this.distrikt = distrikt;
this.antalsåldaartiklar = antalsåldaartiklar;
}

public string bnamn()
{
return namn;
}
public string bpersonnummer()
{
return personnummer;
}
public string bdistrikt()
{
return distrikt;
}
public int bantalsåldaartiklar()
{
return antalsåldaartiklar;
}
}

//Klass där sorteringen beroende på antalet sålda artiklar sker.
class Beräkning
{
public static void Sortera(List<Försäljare> punkt)
{
punkt.Sort((a, b) => a.bantalsåldaartiklar().CompareTo(b.bantalsåldaartiklar()));
}

static void Main(string[] args)
{
//Kod för att registrera antalet säljare.
System.Console.Write("Hur många säljare vill du registrera?:");
string antalsäljare = System.Console.ReadLine();
System.Console.WriteLine("Registrera säljare:");
int AntalSäljare = int.Parse(antalsäljare);

Försäljare[] säljare = new Försäljare[AntalSäljare];

List<Försäljare> försäljarelista = new List<Försäljare>();

// While loop för att upprepa koden nedan så många gånger som det finns registrerade säljare.
int i = 1;
while ( i < AntalSäljare)
{
Console.WriteLine("---------------------");
Console.WriteLine("Namn:");
string namn = Console.ReadLine();

Console.WriteLine("---------------------");
Console.WriteLine("Personnummer:");
string personnummer = Console.ReadLine();

Console.WriteLine("---------------------");
Console.WriteLine("Distrikt:");
string distrikt = Console.ReadLine();

Console.WriteLine("---------------------");
Console.WriteLine("Antal sålda artiklar:");
string antalsåldaartiklar = Console.ReadLine();
int värde;
int.TryParse(antalsåldaartiklar, out värde);

//Kod som lägger till värdena på namn, personnummer, distrikt och antalsåldaartiklar till listan försäljarelista.
Försäljare försäljning = new Försäljare( namn, personnummer, distrikt, värde);
försäljarelista.Add(försäljning);

++i;//lägg till i så att koden upprepas tills det när värdet på AntaletSäljare.
}

//Skicka inmatad data för sortering.
Sortera(försäljarelista);

int nivå1 = 0;
int nivå2 = 0;
int nivå3 = 0;
int nivå4 = 0;

//Nivåerna tilldelas olika tal beroende på hur många säljare som har nått till de olika nivåerna.
foreach( Försäljare fors in försäljarelista)
{
if ( fors.bantalsåldaartiklar() < 50)
{
++nivå1;
}
else if ( fors.bantalsåldaartiklar() > 50 && fors.bantalsåldaartiklar() < 99)
{
++nivå2;
}
else if (fors.bantalsåldaartiklar() > 99 && fors.bantalsåldaartiklar() < 199)
{
++nivå3;
}
else if (fors.bantalsåldaartiklar() > 199 )
{
++nivå4;
}
}

// Kod som skriver ut resultatet för respektive försäljare i konsolen och i till filen,
Console.WriteLine("---------------------");
Console.WriteLine("Namn Personnummer Distrikt Antal");
Console.WriteLine("---------------------");

using (System.IO.StreamWriter file = new System.IO.StreamWriter(Inlämningsuppgift2_försök3_fil_destination.txt))
{

foreach ( Försäljare fors in försäljarelista )
{

file.WriteLine("---------------------");
file.WriteLine("Namn Personnummer Distrikt Antal");
file.WriteLine("---------------------");

if (fors.bantalsåldaartiklar() < 50)
{
Console.WriteLine(nivå1 + " säljare har nått nivå 1 0-49 artiklar.");
file.WriteLine(nivå1 + " säljare har nått nivå 1 0-49 artiklar.");
}
else if (fors.bantalsåldaartiklar() > 50 && fors.bantalsåldaartiklar() < 99)
{
Console.WriteLine(nivå2 + " säljare har nått nivå 2 50-99 artiklar.");
file.WriteLine(nivå2 + " säljare har nått nivå 2 50-99 artiklar.");
}
else if (fors.bantalsåldaartiklar() > 99 && fors.bantalsåldaartiklar() < 200)
{
Console.WriteLine(nivå3 + " säljare har nått nivå 3 100-199 artiklar.");
file.WriteLine(nivå3 + " säljare har nått nivå 3 100-199 artiklar.");
}
else if (fors.bantalsåldaartiklar() > 200)
{
Console.WriteLine(nivå2 + " säljare har nått nivå 4 50-99 artiklar.");
file.WriteLine(nivå2 + " säljare har nått nivå 4 50-99 artiklar.");
}
file.WriteLine(fors.bnamn().PadRight(13) + " " + fors.bpersonnummer().PadRight(16) + " " + fors.bdistrikt().PadRight(14) + " " + fors.bantalsåldaartiklar().ToString().PadRight(11));
Console.WriteLine(fors.bnamn().PadRight(13) + " " + fors.bpersonnummer().PadRight(16) + " " + fors.bdistrikt().PadRight(14) + " " + fors.bantalsåldaartiklar().ToString().PadRight(11));
}
}

while (true)
{
}

}
}
}
}

Permalänk
Medlem

https://www.sweclockers.com/forum/trad/1647458-sa-har-lagger-...

Du vill nog inte använda å ä och ö i variabelnamn eller funktioner, även om det kanske är tillåtet.

Permalänk
Medlem
Skrivet av Edvin Näsholm:

Borde jag skapa en ny text-fil som det sedan skrivs till?

Låter väl rimligt, kolla över vad du skickar in till StreamWriter.
https://learn.microsoft.com/en-us/dotnet/api/system.io.streamwriter?view=net-8.0

Permalänk
Skrivet av Edvin Näsholm:

Kontrollera denna raden:

using (System.IO.StreamWriter file = new System.IO.StreamWriter(Inlämningsuppgift2_försök3_fil_destination.txt))

Du har nog glömt citationstecken (") runt filnamnet. Ska nog vara:

using (System.IO.StreamWriter file = new System.IO.StreamWriter("Inlämningsuppgift2_försök3_fil_destination.txt"))


Lite andra frågetecken kring din kod...


Försäljare[] säljare = new Försäljare[AntalSäljare];

Du verkar aldrig använda denna arrayen? Och på raden under skapar du en lista som du använder istället.


int i = 1; while (i < AntalSäljare) {

Du vill antagligen initialisera variabeln i till 0 inte 1. Som det är nu kommer du läsa in en(1) färre säljare än vad användaren bett om.


if (fors.bantalsåldaartiklar() < 50) { ++nivå1; } else if (fors.bantalsåldaartiklar() > 50 && fors.bantalsåldaartiklar() < 99) { ++nivå2; } else if (fors.bantalsåldaartiklar() > 99 && fors.bantalsåldaartiklar() < 199) { ++nivå3; } else if (fors.bantalsåldaartiklar() > 199) { ++nivå4; }

Du får nog kolla igenom dessa intervaller en extra gång...
(Vilken nivå kommer en säljare ha som sålt exakt 50 artiklar? etc. )


while (true) { }

Förstår ej vad du vill åstadkomma med detta? (Är en oändlig loop)


Permalänk

Tack.

Tack för hjälpen nu fungerar det.