Folgendes Szenario. Ich habe über die Comschnittstelle ein gerät ausgelsen bzw. ein RFID-Tag:
der hat ne serien nummer zum Beispiel von "chip 1"
dazu habe ich ein INI-File, in dem verschiedenene Tags definiert sind
ini-file:
[chip 1]
Bezeichnung=Standardladeschaufel
Typ=SKL85 3
Herstell_Nr=1196-10
Breite=2589
Teile_Nr=04637095007059
Betriebsdruck=0
Inhalt=1550
Gewicht=540
Traglast=1200
[chip 2]
Bezeichnung=Standardladeschaufel2
Typ=SKL85 4
Herstell-Nr.=1196-10
Breite=2200
Teile-Nr.=04637095007059
Betriebsdruck=
Inhalt=1550
Gewicht=540
Traglast=1200
[chip 3]
Bezeichnung=Standardladeschaufel3
Typ=SKL85 5
Herstell-Nr.=1196-10
Breite=2200
Teile-Nr.=04637095007059
Betriebsdruck=
Inhalt=1550
Gewicht=540
Traglast=1200
wie kann ich nun herrausfinden, ob zu dem ausgelesenen Chip eine Section in der Ini.Datei existiert?
Normales Zugreifen auf ein Value geht ja. Nur muss ich irgendwie rausbekommen OB ein eintrag existiert oder nicht, also irgendwie die Sections ansprechen.
Danke schonmal.
Wie liest du denn die ini-Datei ein? Selbstgebastelt oder mit einer 3rd-Party-Bibliothek?
Gehe einfach alle Sektionen der Datei durch und vergleiche die Seriennummer.
Gruß, Christian.
Wenn du keine fremd-Bibliotheken hast, kannst du deine ini-Datei Zeile für Zeile durchgehen, wenn ein neuer Block beginnt, notierst du den Namen in 'ne Variable und wenn dein code auf die entsprechende Nummer trifft, ist der Name des aktuellen Blocks dein gesuchter Wert.
Bevor ich irgendjemanden frage, habe ich Exzessiv mit Suchmaschinen und Foren-Suchen nach einer Lösung gefahndet.
Hallo!
Im Forum gibt's bereits fertige Klassen, welche INI-Dateien einlesen, bearbeiten und auch wieder speichern können.
EDIT: Z.B. Ini-Datei-Klasse
Nobody is perfect. I'm sad, i'm not nobody 🙁
Ah ok danke, es war eine fertige Ini-File Klasse:
Das hier hatte ich noch einfügen müssen, jetzt bekomme ich ein Array mit den Sectionen:
[DllImport("kernel32.dll")]
private static extern uint GetPrivateProfileSectionNames(IntPtr lpszReturnBuffer,
uint nSize, string lpFileName);
gibt es da dann eine Methode, die True zurückgibt wenn ein wert sich in dem Array befindet, oder muss ich das Array mit ner Schleife durchforsten?
Sorry aber ich mache in der Regel net so viel mit c#
Hallo JJPhoenix,
warum kein XML? Damit wäre das ganze ein Kinderspiel.
Hallo JJPhoenix,
warum kein XML? Damit wäre das ganze ein Kinderspiel.
Weil ich möchte dass der Kunde das Fehlerfrei editieren kann 😉
Geht so auch schon, aber vielleicht nochmal etwas kurioses: Kann es sein, daß ein Programm zu schnell arbeitet und irgendwas übersieht ? Klingt blöd, aber habe irgendwie keine Erklärung:
String [] my_sections= ini.SectionNames();
String sectionToFind = Reader_data.Trim();
String my_temp_Bezeichnung = ini.ReadValue(Reader_data, "Bezeichnung", Settings_RFID_Tags.RFID_Tag.Bezeichnung);
if (my_temp_Bezeichnung.Trim() != "")
{
MessageBox.Show("hatta", "BEZ");
}
if (((IList<string>)my_sections).Contains(sectionToFind))
{
Settings_RFID_Tags.Read(sectionToFind);
//ini.ReadValue(Reader_data, "FixCode", Settings_RFID_Tags.RFID_Tag.FixCode);
MessageBox.Show(Settings_RFID_Tags.RFID_Tag.Bezeichnung, "BEZ");
}
warum bekomme ich immer nur eine zweite Messagebox, wenn die erste bedingung aktiv ist? Soll heissen, kommentiere ich die erste Bedingung aus, wird die zweite bedingung immer überflogen.
Wenn ich debugge, so mit Haltepunkten (VS 2008) komme ich auch in die zweite bedingung, also wenn alles schritt für schritt läuft dann gehts, bloß in einem Rutsch nicht? KOMISCH!
🤔 Verstehe die Fragestellung nicht ganz...
Würde eher vermuten, dass diese Bedingung
if (((IList<string>)my_sections).Contains(sectionToFind))
nicht ganz funktioniert; weil: du prüfst einen ungetrimmten Eintrag mit einem** getrimmten** Vergleichswert 😉
Hmm nee, weil mit nem Sleep bekomme ich die Erfüllte bedingun, aber ohne leider nicht:
Thread.Sleep(250);
if (((IList<string>)my_sections).Contains(sectionToFind))
{
Settings_RFID_Tags.Read(sectionToFind);
//ini.ReadValue(Reader_data, "FixCode", Settings_RFID_Tags.RFID_Tag.FixCode);
MessageBox.Show(Settings_RFID_Tags.RFID_Tag.Bezeichnung, "BEZ");
}
Bitte verwende für C#-Code die [****CSHARP]-Tags. Die [****CODE]-Tags sind nur für Code in anderen Sprachen. Ich habs in diesem Thread an allen Stellen korrigiert.