Autor Beitrag
-CrimeTime- Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55



BeitragVerfasst: Di 30.11.10 08:10 
Super, genau das war es wohl jedenfalls geht es nun 1A.

Danke euch allen die beteiligt waren :)

Edit:

nun habe ich nur noch ein Problem das wäre wie ich in einer Emun einen wert mit Leerzeichen mache z.B.
Frischer Kaffee = 154
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19340
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 30.11.10 09:46 
user profile icon-CrimeTime- hat folgendes geschrieben Zum zitierten Posting springen:
nun habe ich nur noch ein Problem das wäre wie ich in einer Emun einen wert mit Leerzeichen mache z.B.
Frischer Kaffee = 154
Irgendwie verwechselst du da was, das ist der Bezeichner in C#, das hat nichts mit dem zu tun, was du ggf. dem Benutzer anzeigst. Und Bezeichner können nun einmal keine Leerzeichen enthalten, woher sollte C# auch wissen, dass das zusammengehören soll? :nixweiss:
-CrimeTime- Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55



BeitragVerfasst: Di 30.11.10 10:06 
ich überprüfe aber noch den Name, und somit brauche ich dort ein Leerzeichen oder ich muss es aus einer Externen Textdatei überprüfen, was ich nun so machen werde.
Greenberet
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 339
Erhaltene Danke: 20

Win 10
C# (VS 2012), C++ (VS 2012/GCC), PAWN(Notepad++), Java(NetBeans)
BeitragVerfasst: Di 30.11.10 10:11 
Ich glaube für dich wäre ein Dictionary<string,int> besser geeignet als ein Enum.

Falls du unbedingt ein Enum brauchst kannst du ja statt dem Leerzeichen ein Unterstrich machen. Wenn du jetzt die Texteingabe hast, ersetzt du im Code( string.replace ) alle Leerzeichen durch Unterstriche. So kommst du auch zu deinem "Frischer Kaffee"

Für diesen Beitrag haben gedankt: Yogu
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Di 30.11.10 14:40 
user profile iconGreenberet hat folgendes geschrieben Zum zitierten Posting springen:
Ich glaube für dich wäre ein Dictionary<string,int> besser geeignet als ein Enum.

Dem stimme ich zu, wobei es vielleicht noch einer Erklärung bedarf:

Enumerations sind Aufzählungen. Dabei sind die Zahlenwerte (also das, was nach dem = steht), normalerweise unbedeutend. In manchen Fällen gibt man ihn auch an, allerdings handelt es sich dann eher um eine eindeutige Zahl, z.B. die Artikelnummer.

Das technische Problem ist, dass kein Wert doppelt auftreten kann. Wenn du nun zwei Produkte hast, die gleich viel kosten, kommst du mit deinem Ansatz nicht weiter. Außerdem lässt sich die Datenbank schlecht erweitern, da alle Artikel bereits beim Programmieren feststehen müssen.

Ein Dictionary dagegen ist erweiterbar und darf mehrere Einträge mit gleichem Wert (natürlich nicht mit gleichem Namen) enthalten. Außerdem sind auch Leerzeichen erlaubt.

Um im Dictionary nach passenden Produkten zu suchen, kannst du folgende Schleife verwenden:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
foreach (var item in dictionary) {
  if (item.Value <= geld) {
    MessageBox.Show(item.Key);
  }
}
-CrimeTime- Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55



BeitragVerfasst: Di 30.11.10 15:38 
Also danke für all die weiteren Ratschläge, aber ich mache es Lieber in einer neuen Ini-Datei wo ich die Namen der Getränke / Essen ablagere das ich das Problem mit dem Leerzeichen löse, ist auch so besser für meine Methode, das neue Problem wäre dann nur wie ich das anstelle weil laut meiner Erfahrung kann man in eine *.ini nicht so Auslesen wie ich es vorhabe (den gesamten Text von [Getränke] Auslesen und schauen ob der Name vorhanden ist) oder liege ich da Falsch?

Eine *.ini Lade / Lese Funktion besitze ich bereits!
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Di 30.11.10 16:01 
Schonmal was von Punkten gehört? :gruebel:

user profile icon-CrimeTime- hat folgendes geschrieben Zum zitierten Posting springen:
ich mache es Lieber in einer neuen Ini-Datei wo ich die Namen der Getränke / Essen ablagere

Gut, so kannst du die Daten natürlich auf die Festplatte speichern. Das hat aber eigentlich nichts damit zu tun, wie du sie während der Laufzeit verwaltest. Ein Dictionary eignet sich übrigens wirklich gut, um in eine Ini-Datei gespeichert oder aus einer ausgelesen zu werden, denn es ist im Grunde genau so aufgebaut.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
    private Dictionary<stringint> loadDictionary(string iniData) {
      Dictionary<stringint> dictionary = new Dictionary<stringint>();

      string[] lines = iniData.Split('\n');
      foreach (string line in lines) {
        string[] data = line.Split(new char[] { '=' }, 2);
        dictionary[data[0]] = int.Parse(data[1]);
      }

      return dictionary;
    }


user profile icon-CrimeTime- hat folgendes geschrieben Zum zitierten Posting springen:
das neue Problem wäre dann nur wie ich das anstelle weil laut meiner Erfahrung kann man in eine *.ini nicht so Auslesen wie ich es vorhabe (den gesamten Text von [Getränke] Auslesen und schauen ob der Name vorhanden ist) oder liege ich da Falsch?

Wie meinst du das?
-CrimeTime- Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55



BeitragVerfasst: Di 30.11.10 16:19 
also für mich eignet sich eine Dictionary auf garkeinen fall, da ich dieses Programm in mehreren Sprachen Veröffentliche und wenn dann in der Dictionary Deutsche Getränke oder Essen sind sieht es verdammt blöd aus wenn dann ein Russe sich das Programm ansieht.

Also ich meine es so:
Wenn ich versuche eine *.ini file Auszulesen deren Inhalt so ist
ausblenden Quelltext
1:
2:
3:
4:
[Inhalt]
A=B
C=D
E=F


kann ich nur das hinter den = Zeichen Auslesen, was eigentlich nicht Schlimm wäre da ich ja einfach das was ich brache hinter dem = Schreibe, nur der knackpunkt ist wie stelle ich das an das der Endweder die gesamte Ini-File Öffnet und jederzeit schauen kann ob der Name des Getränks/Essens in der Datei vorhanden ist.

Aber am Liebsten wäre mir es so:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
[Getränke]
Cola
Kaffee
Saft
Limonade
Wasser
[Essen]
Jägerschnitzel
Weisswurst
Rotkohl mit Klöse


das er dies so verwendet und auch Checkt ob der Name in der Datei bzw. *.ini vorhanden ist.

sollten weitere Fragen sein, bitte Fragen ;)
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Di 30.11.10 17:05 
user profile icon-CrimeTime- hat folgendes geschrieben Zum zitierten Posting springen:
also für mich eignet sich eine Dictionary auf garkeinen fall, da ich dieses Programm in mehreren Sprachen Veröffentliche und wenn dann in der Dictionary Deutsche Getränke oder Essen sind sieht es verdammt blöd aus wenn dann ein Russe sich das Programm ansieht.

Aha, und mit einem Enum geht das besser?

Aus deinen Fragen schließe ich, dass du während des Programmablaufs ständig aus der Ini-Datei lesen willst, ist das richtig? Das scheint mir nicht so ganz das richtige Konzept zu sein.

Nochmal zusammengefasst, wie ich es lösen würde:

  • Du hast mehrere Ini-Dateien, eine für jede Sprache. Die einzelnen Einträge sind nach dem Schema [code]Produkt=Preis[/cs] aufgebaut.
  • Beim Programmstart ermittelst du die Sprache des Computers und liest die passende Ini-Datei in ein Dictionary ein.
  • Wenn du dann auf die Daten zugreifen willst, verwendest du das Dictionary[/*]

Um zu prüfen, ob ein Name im Dictionary vorhanden ist, kannst du ContainsKey verwenden.
-CrimeTime- Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55



BeitragVerfasst: Di 30.11.10 17:35 
wenn ich dies nun mit einem Dictionary machen möchte, gibts wieder Probleme beim "wie mache ich die If Schleife", aber ich werde es mal so versuchen wie du es beschrieben hast.

Edit:
Also ich bekomme schonmal nicht die komplette *.ini gelesen weil meine ReadIni Funktion nur Werte zurück gibt, wie kann ich die Gesamte Datei einlesen und dann in den Dictionary packen?
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Di 30.11.10 19:02 
user profile icon-CrimeTime- hat folgendes geschrieben Zum zitierten Posting springen:
"wie mache ich die If Schleife"

Gar nicht, denn es gibt keine If-Schleifen ;) Ne, was meinst du damit denn?

user profile icon-CrimeTime- hat folgendes geschrieben Zum zitierten Posting springen:
wie kann ich die Gesamte Datei einlesen und dann in den Dictionary packen?

In meinem vorletzten Beitrag hab ich doch den Code dazu gepostet.
-CrimeTime- Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55



BeitragVerfasst: Di 30.11.10 19:07 
(string iniData) wie komme ich an das iniData?

und zu dem if, wurde auch schon vorher gepostet, ich muss ja die Daten vergleichen in einer If Schleife, und mit der Dictionary wird sich da sicherlich was ändern.

Edit:
habe es nun hinbekommen mit dem Lesen einer Kompletten Ini-File, doch leider klappt nun der Split von Yogu nicht mehr da es ein string[] ist.

hier sein Code:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
        private Dictionary<string, int> loadDictionary(string[] iniData)
        {
            Dictionary<string, int> dictionary = new Dictionary<string, int>();

            string[] lines = iniData.Split('\n');
            foreach (string line in lines)
            {
                string[] data = line.Split(new char[] { '=' }, 2);
                dictionary[data[0]] = int.Parse(data[1]);
            }
            return dictionary;
           
        }


Das .Split it Rot unterstrichen mit dieser Fehlermeldung:'System.Array' does not contain a definition for 'Split' and no extension method 'Split' accepting a first argument of type 'System.Array' could be found (are you missing a using directive or an assembly reference?)
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Di 30.11.10 19:35 
user profile icon-CrimeTime- hat folgendes geschrieben Zum zitierten Posting springen:
wie komme ich an das iniData?

Das ist der Inhalt der Ini-Datei, den kannst du z.B. so auslesen:

ausblenden C#-Quelltext
1:
2:
3:
string iniData;
using (StreamReader reader = new StreamReader(fileName, new UTF8Encoding()))
  iniData = reader.ReadToEnd();


user profile icon-CrimeTime- hat folgendes geschrieben Zum zitierten Posting springen:
und zu dem if, wurde auch schon vorher gepostet, ich muss ja die Daten vergleichen in einer If Schleife, und mit der Dictionary wird sich da sicherlich was ändern.

Dafür hab ich dir auch schon mal etwas Quelltext gepostet.

user profile icon-CrimeTime- hat folgendes geschrieben Zum zitierten Posting springen:
Edit:
habe es nun hinbekommen mit dem Lesen einer Kompletten Ini-File, doch leider klappt nun der Split von Yogu nicht mehr da es ein string[] ist.

Mach das iniData wieder zu einem string und lese ihn wie oben beschrieben aus, dann müsste es klappen.

Edit: Fehler korrigiert (hervorgehoben)


Zuletzt bearbeitet von Yogu am Di 30.11.10 20:11, insgesamt 1-mal bearbeitet
-CrimeTime- Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55



BeitragVerfasst: Di 30.11.10 19:40 
also ich bekomme hier die Fehlermelung: 'System.IO.StreamReader' is a 'type' but is used like a 'variable'
und es Markiert StreamReader nach dem "=".

hier der Code:
ausblenden Quelltext
1:
2:
            using (StreamReader reader = StreamReader(Application.StartupPath + "\\deDE.ini", new UTF8Encoding()))
            iniData = reader.ReadToEnd();
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Di 30.11.10 20:11 
Sorry, da hat ein new gefehlt.

Für diesen Beitrag haben gedankt: -CrimeTime-
-CrimeTime- Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55



BeitragVerfasst: Di 30.11.10 20:27 
der Code von dir Funktioniert Super, doch wie packe ich das nun in meine If Schleife?

Das einzigste was ich von dir gefunden habe ist eine foreach Schleife unzwar diese hier:

ausblenden Quelltext
1:
2:
3:
4:
5:
foreach (var item in dictionary) {
  if (item.Value <= geld) {
    MessageBox.Show(item.Key);
  }
}


so sieht momentan meine If Schleife aus:
ausblenden Quelltext
1:
 if ((Enum.IsDefined(typeof(Getränk), Zahl)) & blacklist.IndexOf(Zahl) == -1 & checkbox1.Checked))					
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19340
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 30.11.10 20:30 
user profile icon-CrimeTime- hat folgendes geschrieben Zum zitierten Posting springen:
der Code von dir Funktioniert Super, doch wie packe ich das nun in meine If Schleife?
:autsch:
Da verliert man dann ziemlich schnell die Lust zu helfen.
-CrimeTime- Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55



BeitragVerfasst: Di 30.11.10 20:41 
sorry jaenicke, aber was soll ich machen wenn ich einen Vorschlag bekomme doch mit der Funktion des Vorschlags noch nie gearbeitet habe dazu ist das C# gebiet noch recht Neuland für mich, und um die Frage mit den Basic's vorzubeugen ja ich habe mich schon durch ein paar Kapitel gelesen doch leider noch nicht die Zeit gehabt mir das Komplette E-Book durchzulesen.
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Di 30.11.10 21:26 
user profile iconjaenicke bezog sich wahrscheinlich auch auf meinen Kommentar:

user profile iconYogu hat folgendes geschrieben Zum zitierten Posting springen:
user profile icon-CrimeTime- hat folgendes geschrieben Zum zitierten Posting springen:
"wie mache ich die If Schleife"

Gar nicht, denn es gibt keine If-Schleifen ;) Ne, was meinst du damit denn?

Es keine If-Schleifen; was du meinst, ist eine If-Struktur oder eine bedingte Anweisung.

Deine "If Schleife" prüft also, ob ein Getränk existiert, dessen Preis Zahl beträgt, ob es nicht auf der Blacklist steht und schließlich, ob irgendeine Checkbox aktiviert ist.

Nun, meine Schleife sucht nach Produkten, die unter einen bestimmten Preis fallen. Das "unter einen Preis fallen" in ein "mit dem gegebenen Preis genau übereinstimmen" zu ändern, dürfte kein Problem darstlelen, wenn man sich den Code anschaut. Und den Rest kannst du ja so belassen, wie er ist.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19340
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 30.11.10 21:40 
Das meinte ich, ja. Und vorher hatte ich es ja auch schon geschrieben.
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Was für eine Schleife? Ich sehe keine.
Und wenn es dann doch konsequent weiter falsch gemacht wird, zweifle ich halt ein wenig, ob ich noch viel Lust habe weiter zu helfen.