@T-Virus danke, und ja du hast Recht, es zeigt mir immer wieder die gleiche Datei an 🤔
@Abt ahh jez hab ichs glaub ich.
PricingAnalyzer analyzer = new PricingAnalyzer();
string bla = analyzer.GetNextFile();
List<Result> list = analyzer.GetAllKschl(bla, fileNameData); //hat hier noch gefehlt
decimal total = analyzer.GetTotalAmount(bla, fileNameData);
Wie löse ich dass denn wenn ich die Datei Namen nicht in meiner Methode haben will, aber diese ja doch dort brauche? 🤔 einfach im "Hauptcode" deklarieren?
Hey,
Ich habe eine Methode
public List<Result> GetAllKschl(string fileNameResult, string fileNameData)
die mir eine Liste mit verschiedenen Elementen und dem Inhalt aus einer ewig langen .xml Datei zurückgibt. (Z.b. Info, Einzelpreis, Gesamtpreis, usw.)
Diese Daten gebe ich in einer DataGridView aus. Okay, funktioniert soweit.
Nun möchte ich einen weiteren Button Next File
anlegen, der mir dann aus dem Order eben die nächste Datei anzeigt. Bzw wieder nur diese bestimmte Elemente aus der XML. (in der DGV)
Code für meinen ersten Button:
string fileNameResult = @"bla.xml";
string fileNameData = @"blabliblub.xml";
private void button1_Click(object sender, EventArgs e)
{
PricingAnalyzer analyzer = new PricingAnalyzer();
List<Result> list = analyzer.GetAllKschl(fileNameResult, fileNameData);
decimal total = analyzer.GetTotalAmount(fileNameResult, fileNameData);
//Gibt die Ergebnisse aus
dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
dataGridView1.AutoGenerateColumns = true;
dataGridView1.DataSource = list;
txtTotalAmount.Text = total.ToString();
}
Das funktioniert 👍
der zweite Button:
private void btnNext_Click(object sender, EventArgs e)
{
PricingAnalyzer analyzer = new PricingAnalyzer();
string bla = analyzer.GetNextFile();
dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
dataGridView1.AutoGenerateColumns = true;
dataGridView1.DataSource = bla;
}
So hier für zeig ich mal meine Methode:
IEnumerator<string> filesEnumerator;
public string GetNextFile()
{
filesEnumerator = Directory.EnumerateFiles(@"C:\Pricing\sum", "Result*.xml").GetEnumerator();
if (filesEnumerator != null && filesEnumerator.MoveNext())
{
return filesEnumerator.Current;
}
return null;
}
Jetzt gibt er mir natürlich nichts aus, bzw einfach die ganze Datei, aber ich will ja nur die Elemente wieder haben! (aus der Klasse Result
) Muss ich dann die andere Methode auch zusätzlich dort aufrufen? Also versteht ihr was ich meine?
Wieder nur Info, Gesamtsumme, usw. aus der XML Datei filtern und ausgeben, was ich halt mit der anderen Methode mache. Aber ich weiß nicht was ich dann in dem zweiten Button brauche, damit das so funktioniert?
LG
Ahh, ja genau, das ist die Methode die ich brauche 👍
Jetzt klappt es, danke! 👅
Ja, aber dass ist ja nicht mal die Methode die ich brauche.
In meinem Calculator hab ich die Methode:
public int DezAddieren(int number1, int number2)
{
return number1 + number2;
}
auf die ich ja zugreifen will.
Also meinst du, ich muss dann extra nochmal die inputs als int konvertieren?
Hey,
habe zu erst ein Konsolen Programm programmiert dass mir alle Zahlensysteme (Dezimal, Dual, Hex) konvertieren kann und einen Taschenrechner.
Jetzt möchte ich das als WinForms haben, habe den Konvertierer auch schon fertig, aber das mit dem Taschenrechner will nicht so ganz, hab eine Logik mit Rechnungen bereits, deswegen benötige ich doch nur z.B.
private void btnRechne_Click(object sender, EventArgs e)
{
Calculator calculator = new Calculator();
string input1 = txtInputCalc1.Text;
string input2 = txtZeichen.Text;
string input3 = txtInputCalc2.Text;
string result = string.Empty;
if (rbDezCalc.Checked)
{
if (input2 == "+")
{
result = calculator.DezAddieren(int.Parse(input1, input3));
}
}
}
und input1
passt ihm so, aber bei input3
, meckert er
Fehlermeldung:
Error CS1503 Argument 2: cannot convert from 'string' to 'System.Globalization.NumberStyles'
Ich versteh das nicht 🤔
Ja genau das war der Fehler.. X(
Aber ja jetzt klappt es 👍
Ok ich hab meinen Fehler gefunden! 🙂 es funktioniert 👍
for (int index = 0; index < allFiles.Length; index++)
{
string fileName = Path.GetFileName(allFiles[index]);
Console.WriteLine("{0} Datei: {1}", index, fileName);
}
string inputFile = Console.ReadLine();
Danke euch für die schnelle Hilfe
Ahhh danke! Hab ich total übersehen 8o
Aber: jetzt gibt er mir zwar nicht mehr den ganzen Pfad aus, aber dafür nur noch jeweils einen Buchstaben pro Datei 🤔
Hey,
habe hier folgenden Code, der auch funktioniert:
if (userInput == "1")
{
string[] allFiles = Directory.GetFiles(@"C:\Users\Debug", "*.txt");
Console.WriteLine("Wähle eine Datei aus, die du öffnen möchtest:", allFiles.Length);
Console.Write("\n");
for (int index = 0; index < allFiles.Length; index++)
{
string fileName = Path.GetFileName(allFiles[index]);
Console.WriteLine("{0} Datei: {1}", index, allFiles[index]);
}
string inputFile = Console.ReadLine();
int userIndex;
if (int.TryParse(inputFile, out userIndex))
{
if (userIndex >= 0 && userIndex < allFiles.Length)
{
string selectFile = allFiles[userIndex];
string readText = File.ReadAllText(selectFile);
Console.WriteLine(readText);
}
else
{
Console.WriteLine("Eingabe außerhalb des Bereichs!");
}
}
else
{
Console.WriteLine("Kein numerischer Wert!");
Console.Read();
}
Console.Read();
Jetzt gibt er mir immer den kompletten Pfad aus, ich möchte aber das er mir eben nur den hinteren Teil also den Namen ausgibt.
Wie ihr seht habe ich es bereits mit
for (int index = 0; index < allFiles.Length; index++)
{
string fileName = Path.GetFileName(allFiles[index]);
Console.WriteLine("{0} Datei: {1}", index, allFiles[index]);
}
string inputFile = Console.ReadLine();
versucht. Man braucht ja die GetFileName Methode, aber wo liegt den mein Fehler? Finde im Internet nichts dazu und er gibt mir auch keinen Fehler aus 🤔
Klar ich probier es selber, wollte nur wissen ob der Ansatz so stimmt 😃
danke 😃
Hey,
danke für eure Hilfe!
was sagt ihr zu diesem Code?
if (userInput == "1")
{
string[] allFiles = Directory.GetFiles(@"C:\Users\Debug", "*.txt");
Console.WriteLine("Wähle eine Datei aus:", allFiles.Length);
Console.Write("\n");
int count = 0;
foreach (string file in allFiles)
{
count += 1;
Console.WriteLine("{0} Datei: {1}", count, file);
}
Console.Read();
string inputFile = Console.ReadLine();
}
Also es wird mir so als 1 Datei ist blablabla 2 Datei ist blabliblub usw angezeigt.
Kann ich damit dann weiter arbeiten, also dass wenn ich jetzt die 1 auswähle er mir dann den Inhalt von 1 ausgibt 🤔
echt, brauch ich dafür ne Liste? 🤔
Dann muss ich ja erst mal immer alles in die Liste speichern und dann abrufen oder?
Hey,
habe jetzt folgenden Code:
if (userInput == "1")
{
string[] allFiles = Directory.GetFiles(@"C:\Users\ConsoleApp3\bin\Debug", "*.txt");
Console.WriteLine("Wähle eine Datei aus:", allFiles.Length);
Console.Write("\n");
foreach (string file in allFiles)
{
Console.WriteLine(file);
}
Console.Read();
string indexFile = Console.ReadLine();
Ich glaube ich stehe gerade auf dem Schlauch, aber ich möchte dass meine Dateien nummeriert in der Konsole erscheinen, sodass man eben eine Datei auswählen kann, also die Dateien werden untereinander angezeigt, aber ohne Nummern davor 🤔 wie kann ich das ändern?
LG
Hey 123thomas,
Vielen Dank, hilft mir schon mal sehr viel weiter 🙂
@Coffebean
Danke dir auch, werde es jetzt mal testen. 👍
Hey Abt,
Hab ich sehr wohl gelesen und geschrieben, dass ich das nicht ganz verstehe, da ich nicht verstehe was mein zweiter string sein soll, siehe paar Beiträge weiter oben
Hey,
Ja genau den Inhalt der dateien brauch ich auch. Aber das Problem ist, in dem Ordner befinden sich eben viele Dateien, z.B. eine mit .exe, oder .pdb. Aber ich will NUR die .txt Datei in meinem Programm lesen, wisst ihr was ich meine? Momentan sieht meine Konsole so aus:
Wähle eine Option aus:
ConsoleApp3.exe
ConsoleApp3.exe.config
ConsoleApp3.pdb
Hallo.txt
und ich will nur z.B. die Hallo.txt Datei haben.
Hey,
danke, meinst du GetFiles(String,String) ? 🤔
aber ich versteh trotzdem nicht ganz, was mein zweiter string sein soll 8o
LG
Hey,
bin neu hier und die Frage klingt vllt doof, aber ich hab mehrere .txt Dateien gespeichert und will diese beim Öffnen meines Programms abrufen.
Ich finde nur Befehle und Tutorials für das Einlesen für einen Pfad? Das ist ja nicht schwer, da geb ich einfach den bestimmten Pfad ein, aber wie mach ich das mit mehreren? Die können sich auch immer verändern, heißt einfach "alle" Pfads eingeben geht auch nicht.
Hier mal mein Code:
if (userInput == "1")
{
Console.WriteLine("Das sind alle vorhandenen Dateien:");
Console.Read();
DirectoryInfo di = new DirectoryInfo(@"C:\Pfad wo alle Dateien drin sind");
foreach (var file in di.GetFiles())
{
Console.WriteLine(file.Name);
Console.Read();
}
Console.WriteLine();
mein Programm beendet sich einfach immer nachdem es jede Datei abgelaufen ist.
Ich muss ihm jetzt irgendwie noch sagen, dass er alle .txt Dateien anzeigen soll, gibt es da einen bestimmten Befehl den ich übersehen habe?
Bin eben neu im Programmieren 😁
LG
Vielen Dank für die 'netten' Worte @LaTino.
Kann ichs ja anscheinend gleich sein lassen, wenn es eh zu spät ist. 👍
Eben, ich will einfach verschiedenes versuchen zu üben 🙂
Will dann das ganze auch noch mit XML probieren.. einfach um das mal gemacht zu haben.
Und ich will das Ganze auch nicht mit Helfern oder Librarys machen, sondern eben selber. 🙂
Ja, habe ich vorhin auch selber bemerkt 😁 👍
Aber danke! Hat geklappt 🙂
So jetzt muss ich schauen, dass immer wenn ich das Programm schließe, dass dann die gespeicherten Daten angezeigt werden.
Muss ich quasi alles rückwärts machen jez oder? Also Datei lesen, spliten ..?
ach so, also fehlt mir sowas wie
File.WriteAllText(@"Name.csv", autos);
? Dass er auch alles in eine Datei schreibt?
Wenn ich das aber genau so mit dem Debugger durchlaufen lassen, dann zeigt er mir alle vorhandenen Autos an 🤔
okay, danke schon mal 🙂
Aber wenn ich jetzt
CSVWriter.SaveFileAuto(_autos);
in meinen Hauptcode schreibe, dann müssten doch alle Autos gespeichert sein oder?
So habe eine Klasse CSVWriter erstellt:
public static class CSVWriter
{
public static void SaveFileAuto(List<Auto> autos)
{
// Erste Zeile (Header für Auto)
string fileContent = "Hersteller;Modell;Farbe;Kennzeichen" + Environment.NewLine;
// weitere Zeilen hinzufügen
foreach (var auto in autos)
{
fileContent += auto.Hersteller + ";" + auto.Modell + ";" + auto.Farbe + ";" + auto.Kennzeichen + Environment.NewLine;
}
}
public static void SafeFilePersonen(List<Personen> personen)
{
// Erste Zeile (Header für Personen)
string fileContent = "Vorname;Nachname,Geburtstag" + Environment.NewLine;
// weitere Zeilen hinzufügen
foreach (var person in personen)
{
fileContent += person.Vorname + ";" + person.Nachname + ";" + person.Geburtstag + Environment.NewLine;
}
}
}
jetzt muss ich es noch ausgeben als CSV Datei..
Das letzte was ich wollte ist irgendwem böse Absichten zu unterstellen 8o
Entschuldigung bei allen, ich werde versuchen es iwie selber hinzubekommen
Ich habe es probiert! Mega viele Varianten..
Mein Problem ist, dass ich sowas noch nie gemacht habe und jetzt halt nicht weiß, kommt das alles vor static void Main?
weil da hab ich ja bereits eine Klasse mit Fuhrpark, muss danach die Klasse CSVWriter? Das würde mir schon sehr viel weiter helfen, dass zu wissen.
Hab nie nach einer vollständigen Lösung verlangt.
Noch hinzu kommt, im Internet steht nie was man tun soll, wenn das Programm, anlegen, löschen und editieren kann und man das alles speichern möchte.
Hä? nein, nur wollte ich eine Erklärung dazu haben mensch..
Sorry, das ich Anfänger bin und es nicht verstanden habe.
Ja, ich habe mir alle Beispiele angeschaut, nur war bei mir immer alles falsch und es kamen nur Fehlermeldungen, deswegen dachte ich, dass das nicht die richtige Lösung war.
Nicht sehr freundlich mich gleich so anzuschnauzen.
Ja, aber das hilft mir ja alles nicht wirklich weiter, ich will ja mein Konsolen Programm in CSV Format speichern.
Mein Programm beginnt ja schon mal mit:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Fuhrpark1
{
class Fuhrpark
{
private static List<Auto> _autos = new List<Auto>(); // Anlegen von neuer Liste für Autos
private static List<Personen> _personen = new List<Personen>(); // Anlegen von neuer Liste für Personen
static void Main(string[] args)
{
do
{
Console.WriteLine(
"\n" +
"Wähle bitte eine Möglichkeit: \n\n" +
"1 für das Anlegen eines neuen Autos \n" +
"2 für das Anzeigen der vorhandenen Autos \n" +
"3 für das Anlegen von Personen \n" +
"4 für das Anzeigen von vorhandenen Personen \n\n" +
"5 für das Löschen einer Person \n" +
"6 für das Löschen eines Autos \n" +
"7 für das Bearbeiten einer Person \n" +
"8 für das Bearbeiten eines Autos \n\n" +
"9 für das Verknüpfen von Auto und Personen\n" +
"0 Für das Anzeigen der Verknüpfungen\n");
input = Console.ReadKey().Key;
Console.Clear();
also nur ein kleiner Ausschnitt vom Anfang, und ich will jez dass immer wenn ich eine Person/Auto anlege oder verknüpfe dass es mir das in CSV Format speichert.
Ach so, macht Sinn. 😁
Kann ich aber
public class CSVWriter
{}
schreiben als Anfang?
Hey danke für die Seite.
Also lieg ich aber richtig, dass man dafür ne neue Klasse öffnen muss oder? Weil dort auch steht "mapping class"?
Hey Leute,
Bin ja neu in der Welt des Programmierens.
Habe mir ein Consolen Programm erstellt, dass mir verschiedene Werte einer Liste ausgibt, z.B. verschiedene Personen und Autos und ich kann die Personen und Autos auch miteinander verknüpfen mit einer n:m Beziehung. Klappt alles so weit ohne Fehler. Jetzt möchte ich, dass die gemachten Veränderungen und Eingaben nicht immer verloren gehen, sondern alle Informationen gespeichert werden.
Habe mich für CSV entschieden, habe allerdings sowas noch nie erstellt.
Mein Ziel ist es also, nach jeder Aktion im Programm sollen alle Infos automatisch gespeichert werden.
So, ich habe viel gegoogelt, aber keine passende Lösung gefunden.
Muss ich eine neue Klasse aufmachen in C# und dort eine CSV Datei erstellen? oder in meiner Main?
Möchte nur gerne den Anfang wissen, was ich tun muss um sowas zu erstellen..
Liebe Grüße
public static void BearbeitePerson()
{
Console.WriteLine("Wähle eine Person, die du bearbeiten willst:");
Console.WriteLine("\n");
for (int i = 0; i < _personen.Count; i++)
{
Console.WriteLine(i.ToString() + " " + _personen[i].ToString());
}
int index = Convert.ToInt32(Console.ReadLine());
Personen myPerson = _personen[index];
Console.Write("Vorname: ");
var vorname = Console.ReadLine();
if (string.IsNullOrEmpty(vorname)) return;
und dann das halt für Nachname und Gb erweitern, ich habe nämlich vorhin einen anderen und übersichtlicheren Weg gefunden.. ich bin in die Klasse Personen gegangen und hab dort:
public string ReadNewValue(string prefix)
{
Console.Write(prefix + ": ");
var input = Console.ReadLine();
return input;
geschrieben. In meinen Main Code musste dann nur noch:
public static void BearbeitePerson()
{
Console.WriteLine("Wähle eine Person, die du bearbeiten willst:");
Console.WriteLine("\n");
for (int i = 0; i < _personen.Count; i++)
{
Console.WriteLine(i.ToString() + " " + _personen[i].ToString());
}
int index = Convert.ToInt32(Console.ReadLine());
Personen myPerson = _personen[index];
myPerson.Vorname = myPerson.ReadNewValue("Vorname");
myPerson.Nachname = myPerson.ReadNewValue("Nachname");
myPerson.Geburtstag = myPerson.ReadNewValue("Geburtstag");
}
so fand ich es fast einfacher.. 🙂
Ich hab es jetzt übrigens geschafft 🙂
Vielen Dank für eure Hilfe!
ja wie gesagt, bin noch total am Anfang und finde das alles sehr schwierig noch 🙁
Hey 123thomas,
danke für deine Hilfe! mein Code macht aber einfach gar nichts, ich gebe die Person ein die er ändern soll aber nichts passiert 8o
public static void BearbeitePerson()
{
Console.WriteLine("Wähle eine Person, die du bearbeiten willst:");
Console.WriteLine("\n");
for (int i = 0; i < _personen.Count; i++)
{
Console.WriteLine(i.ToString() + " " + _personen[i].ToString());
}
Personen myPerson = _personen[1];
string myPersonName = myPerson.Vorname;
Console.ReadLine();
}
Ich kenne ja die einfachen Grundlagen, aber ich verstehe einfach nicht, warum das Programm einfach nichts macht? nicht mal mit return passiert etwas..
P.S. sorry, hab es vorhin noch nicht hinbekommen
Okay, ich muss also meine Liste
private static List<Personen> _personen = new List<Personen>();
also _personen zu einen Int wandeln?
nur weiß ich dafür keinen passenden Befehl.. mit _personen.ConvertAll?
und: wenn ich dein Programm teste gibt es mir eine Fehlermeldung aus bei
cars.Add(new Car(i, "Porsche 911"));
Fehlermeldung:
--> Error CS1729 'Personen' does not contain a constructor that takes 2 arguments, wenn ich den Inhalt lösche, dann kommt kein Fehler mehr.
Hey, ja ich frage zu erst ab "Vorname?" dann "Nachname?" dann "Geburtstag?" und des was ich da eingebe wird gespeichert. Sobald ich die Nummer 7 drücke, erscheint eine Liste mit allen Personen die ich manuell eingegeben habe. Und von dieser Liste will ich eine beliebige auswählen die ich ändern kann.
Kann ich dann anstatt wie du "Porsche" zu schreiben, einfach einen Platzhalter machen? Weil er soll ja dafür kein vorgegebenes Wort einsetzen, sondern ich will ja dann wieder die Person/auto manuell bearbeiten.
public static void BearbeitePerson()
{
Console.WriteLine("Wähle eine Person, die du bearbeiten willst:");
Console.WriteLine("\n");
for (int i = 0; i < _personen.Count; i++)
{
Console.WriteLine(i.ToString() + " " + _personen[i].ToString());
}
string zuBearbeiten = Console.ReadLine();
Ist es dann richtig wenn ich so anfange, dass er mir praktisch alle vorhandenen Personen in einer nummerierten Liste ausgibt? Und jetzt müsste ich eine auswählen (je nachdem wie viele ich hab), dass ich bearbeiten kann..
Weil ich habe ja keine Autos gegeben, sondern gebe die ja erst in die Konsole ein, verstehst du was ich meine? (sorry, ich bekomm es nicht hin dass ich den C# Code hervor hebe X()
Hey, hab es jetzt geschafft bestimmte Elemente in einer Liste zu löschen, aber wie kann ich denn bestimmte Elemente bearbeiten? Heißt ich will z.B,. den Namen oder Geburtstag verändern, während der Konsolen Anwendung, muss ich dafür wieder eine neue Liste anlegen? 8o
okaay danke 😁
werd ich mir merken 👍
das sind einfach Übungen die ich zur Hilfe machen kann 😉
Ich habe das Problem übrigens selber gefunden, habe eine if Schleife gemacht 🙂 aber vielen dank an euch alle!
Aber er gibt mir immernoch, die Fehlermeldung bei guess = input[0]; aus..
Hey, sorry bin neu hier und auch in der ganzen C# Welt sehr neu, verzeiht mir also doofe Fragen X(
also zur erwähnten doofen Frage 😁 :
muss ich dann guess = string.IsNullOr.WhiteSpace
eingeben? ich komm grad echt nicht weiter..
Hey Leute,
habe ein Hangman Spiel programmiert das auch einwandfrei läuft, allerdings wenn man die Retourn Taste drückt, haut es mir eine Fehlermeldung raus. Ich muss also abfragen was passiert wenn man eben nichts angibt.
Nur wie mach ich das? Weil mit string.empty klappt es nicht, da es kein string is. Die Fehlermeldung wird mir hier ausgegeben:
int lives = 5; //Anzahl Versuche
bool won = false;
int lettersRevealed = 0; //Aufgedeckte Buchstaben
string input;
char guess; //Versuche
while (!won && lives > 0)
{
Console.WriteLine("Gib einen Buchstaben ein: ");
input = Console.ReadLine().ToUpper();
guess = input[0]; //-->Hier is die Fehlermeldung
habt ihr eine Idee? Vllt mit try und catch? aber er gibt mir nur Fehlermeldungen aus..
Hey, ich habe folgende Listen erstellt:
private static List<Auto> _autos = new List<Auto>();
private static List<Personen> _personen = new List<Personen>();
und da drin kann ich jeweils die Namen der Autos und Personen eingeben. Bsp.: ich klicke 1 und dann kann ich selber eingeben: VW, Golf, schwarz.
Das gleiche bei Personen: Lena, Bauer, 13.05.1996
ich kann eben unterschiedlich viele Elemente eingeben und diese werden dann in die Listen gespeichert.
So, jetzt möchte ich, dass wenn ich 5 eingebe sollen alle bereits vorhandenen Personen auftauchen und ich kann davon eine auswählen und diese dann löschen.. so Problem für mich ist, wie mach ich des dass ich da eine Person auswählen kann, ich weiß ja vorher nicht welche ich auswähle.
also mein Programm beginnt so:
Console.WriteLine(
"Wähle bitte eine Möglichkeit: \n\n" +
"1 für das Anlegen eines neuen Autos \n" +
"2 für das Anzeigen der vorhandenen Autos \n" +
"3 für das Anlegen von Personen \n" +
"4 für das Anzeigen einer vorhandenen Person \n\n" +
"5 für das Löschen einer Person \n" +
"6 für das Löschen eines Autos \n" +
"7 für das Bearbeiten einer Person \n" +
"8 für das Bearbeiten eines Autos \n");
ich habe die ersten 4 Punkte bereits, aber verstehe nicht ganz wie ich da jetzt bestimmte Elemente löschen/bearbeiten kann.