| Autor |
Beitrag |
-CrimeTime- 
      
Beiträge: 55
|
Verfasst: 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
      
Beiträge: 19340
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 30.11.10 09:46
|
|
-CrimeTime- 
      
Beiträge: 55
|
Verfasst: 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
      
Beiträge: 339
Erhaltene Danke: 20
Win 10
C# (VS 2012), C++ (VS 2012/GCC), PAWN(Notepad++), Java(NetBeans)
|
Verfasst: 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
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Di 30.11.10 14:40
Greenberet hat folgendes geschrieben : | | 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:
C#-Quelltext 1: 2: 3: 4: 5:
| foreach (var item in dictionary) { if (item.Value <= geld) { MessageBox.Show(item.Key); } } |
|
|
-CrimeTime- 
      
Beiträge: 55
|
Verfasst: 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
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Di 30.11.10 16:01
|
|
-CrimeTime- 
      
Beiträge: 55
|
Verfasst: 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
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:
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
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Di 30.11.10 17:05
-CrimeTime- hat folgendes geschrieben : | | 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- 
      
Beiträge: 55
|
Verfasst: 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
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Di 30.11.10 19:02
|
|
-CrimeTime- 
      
Beiträge: 55
|
Verfasst: 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:
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
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Di 30.11.10 19:35
-CrimeTime- hat folgendes geschrieben : | | wie komme ich an das iniData? |
Das ist der Inhalt der Ini-Datei, den kannst du z.B. so auslesen:
C#-Quelltext 1: 2: 3:
| string iniData; using (StreamReader reader = new StreamReader(fileName, new UTF8Encoding())) iniData = reader.ReadToEnd(); |
-CrimeTime- hat folgendes geschrieben : | | 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.
-CrimeTime- hat folgendes geschrieben : | 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- 
      
Beiträge: 55
|
Verfasst: 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:
Quelltext 1: 2:
| using (StreamReader reader = StreamReader(Application.StartupPath + "\\deDE.ini", new UTF8Encoding())) iniData = reader.ReadToEnd(); |
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Di 30.11.10 20:11
Sorry, da hat ein new gefehlt.
Für diesen Beitrag haben gedankt: -CrimeTime-
|
|
-CrimeTime- 
      
Beiträge: 55
|
Verfasst: 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:
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:
Quelltext 1:
| if ((Enum.IsDefined(typeof(Getränk), Zahl)) & blacklist.IndexOf(Zahl) == -1 & checkbox1.Checked)) |
|
|
jaenicke
      
Beiträge: 19340
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 30.11.10 20:30
|
|
-CrimeTime- 
      
Beiträge: 55
|
Verfasst: 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
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Di 30.11.10 21:26
jaenicke bezog sich wahrscheinlich auch auf meinen Kommentar:
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
      
Beiträge: 19340
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 30.11.10 21:40
Das meinte ich, ja. Und vorher hatte ich es ja auch schon geschrieben. Und wenn es dann doch konsequent weiter falsch gemacht wird, zweifle ich halt ein wenig, ob ich noch viel Lust habe weiter zu helfen.
|
|