Forum: Mikrocontroller und Digitale Elektronik Brauche Hilfe bei einem C# Programm


von Lorenz S. (lorenz_s)


Angehängte Dateien:

Lesenswert?

Hi, ich schreibe zur zeit ein Programm für 
Sozialversichrungsnummern(svn).
In meinem Programm sollte man neue svn hinzufügen können, alle 
vorhandenen svn anzeigen lassen können und nach einer bestimmten suchen 
können. Leider packe ich das mit dem suchen nicht ganz.
Wenn die gesuchte svn vorhanden ist, sollte svn vorhanden ausgegeben 
werden.
Habe es mit IndexOf probiert.
Mein versuch könnt ihr euch anschauen.
Danke und lg.

von Cyblord -. (cyblord)


Lesenswert?

Lorenz S. schrieb:
> Leider packe ich das mit dem suchen nicht ganz.
> Wenn die gesuchte svn vorhanden ist, sollte svn vorhanden ausgegeben
> werden.
> Habe es mit IndexOf probiert.

Und den trivialen Ansatz willst du nicht?
Einfach mal über alle Nummern laufen und mit der Gesuchten vergleichen?

Wenn deine Datenbank o.ä. keine speziellen Eigenschaften hat, bleibt 
sowieso keine andere Möglichkeit.

: Bearbeitet durch User
Beitrag #7031144 wurde von einem Moderator gelöscht.
von Thomas W. (Gast)


Lesenswert?

Moin, -

an diesem Beispiel kann man schoen sehen, dass Ascii immer noch #1 fuer 
Programme ist:

> private static string[] svnHinzufügen(string neuessvn, string[] svn)

Gruesse

Th.

Beitrag #7031162 wurde vom Autor gelöscht.
von Stefan F. (Gast)


Lesenswert?

>> private static string[] svnHinzufügen(string neuessvn, string[] svn)

Thomas W. schrieb:
> an diesem Beispiel kann man schoen sehen, dass Ascii immer noch #1 fuer
> Programme ist

Sorry, aber das ist eindeutig utf-8, nur falsch dargestellt.

von Dirk K. (merciless)


Lesenswert?


von merciless (Gast)


Lesenswert?

Wie sieht das dann in meinem programm aus?

von Dirk K. (merciless)


Lesenswert?

Ich wollte dir nicht die Lernkurve wegnehmen. Lies die Doku zur List<T> 
und überlege, wie du das in deinem Programm einsetzen kannst. Hilfreich 
könnten die Methoden
1
public void Add (T item);
2
public bool Exists (Predicate<T> match);

sein.

merciless

von merciless (Gast)


Lesenswert?

Aber mit indexOf geht es nicht?
Bzw. Was hab ich falsch gemacht

von Stefan F. (Gast)


Lesenswert?

merciless schrieb:
> Aber mit indexOf geht es nicht?

Irgendwas machst du wohl falsch, schätze ich. Ich habe noch nie in C# 
programmiert, aber ich vertraue darauf, dass das Beispiel in der Doku 
nicht gelogen ist:

https://docs.microsoft.com/de-de/dotnet/api/system.collections.generic.list-1.indexof?view=net-6.0

Demnach geht es.

Du musst nur die List Klasse benutzen, anstelle des Arrays. Wenn du 
unbedingt beim "dummen" Array bleiben willst oder musst, dann musst du 
halt "zu Fuß" darin suchen.

von grundschüler (Gast)


Lesenswert?

Das kann man austesten. Haltepunkt für doppelte svn mit if()... einbauen 
und dann schauen was bei Indexof konkret nicht passt.

von Schlaumaier (Gast)


Lesenswert?

Sicher ist sicher schrieb im Beitrag #7031144:
> Achung, die DSGVO beachten

Was hat die denn damit zu tun.  Berechtigte Mitarbeiter werden auch mit 
der DSGVO Zugriff auf die Personaldaten haben. Und der Rest hat nicht 
mal ein Passwort für den Zugang zur Software.


@TO

Wieso machst du das so kompliziert.

Mach nach jeden Tastendruck beginnend mit den 3 eine Datenbank anfrage 
mit like. oder aber frage nach der Eingabe die Datenbank ab.

Da du die Daten eh speicherst ist das die einfachste Lösung.

Und wenn du ein Listview mit Eingabe verwendest kannst du ja (wie das 
allgemein üblich ist) die gefundenen Werte anzeigen. Wenn du das 
Listview verlässt, dann kommt ne Meldung und der Datensatz wird 
angezeigt auf Wunsch.

Das ist erweitertes Coden für Anfänger.

von grundschüler (Gast)


Lesenswert?

int i = svn.Indexof(gessvn);
                    if (i > 0)


Probier mal:
 if (i > -1)

von Stefan F. (Gast)


Lesenswert?

Sage mal, steigt bei

> svn.Indexof(gessvn)

nicht der Compiler aus? Arrays haben doch gar keine Methoden!

Aber ich habe gerade gesehen, dass eine Hilfsklasse gibt, mit der man 
das ohne die List Klasse machen kann:
https://docs.microsoft.com/de-de/dotnet/api/system.array.indexof?view=net-6.0

Und grundschüler hat völlig Recht, die Zählung fängt bei 0 an. Du 
bekommst eine 0 zurück, wenn der String ganz am Anfang gefunden wurde. 
-1 bedeutet "nicht gefunden".

> Probier mal:
> if (i > -1)

von Schlaumaier (Gast)


Lesenswert?

Dumme Frage.

Wieso legt man Sozialversicherungs-Nummern in ein Array.

Das ist doch der klassische Fall für eine Datenbankabfrage.

Arrays werde doch eh gelöscht wenn das Prg. geändert wird. Und ab ein 
gewissen Punkt ist eh der Speicher voll.

Irgendwas passt da nicht zusammen. !?!?!?!

von Stefan F. (Gast)


Lesenswert?

Schlaumaier schrieb:
> Wieso legt man Sozialversicherungs-Nummern in ein Array?

Das ist doch nur eine Übungsaufgabe!

von Schlaumaier (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Das ist doch nur eine Übungsaufgabe!

Axo ;)

Aber eine doofe.

von Stefan F. (Gast)


Lesenswert?

Schlaumaier schrieb:
> Aber eine doofe.

Das ist noch harmlos. Ich musste fast ein ganzes Schuljahr lang 
Strichzeichnungen mit einer virtuellen Schildkröte malen, die einen 
Stift hinter sich her zieht. Aber nicht mit Schleifen und Algorithmen, 
sondern schier endlosen Listen von Kommandos im Batch-Stil (es war aber 
Turbo Pascal).

Als ich damit anfing, Schleifen und Algorithmen zu programmieren, wurde 
ich aus dem Kurs geworfen und bekam eine 5 auf dem Zeugnis.

Guck die das mal an: Beitrag "Spannungsabfall Widerstand berechnet"
Der Kollege tut mir leid.

von c-hater (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:

> Du musst nur die List Klasse benutzen, anstelle des Arrays. Wenn du
> unbedingt beim "dummen" Array bleiben willst oder musst, dann musst du
> halt "zu Fuß" darin suchen.

Nein, muss er nicht. string[] erbt von System.Array und diese Klasse hat 
ein paar abstrakte Methoden, die man nutzen kann, u.a. auch IndexOf. 
Darüber hinaus hat so nochmal deutlich mehr generische Methoden, die man 
ebenfalls nutzen kann. Wenn man hart genug im Nehmen ist und sich mit 
dem ganzen syntaktischen Wahnsinn generischer Programmierung tatsächlich 
auseinandersetzen will...

Also, es geht z.B.:

System.Array.IndexOf(svn, gessvn);

Das ist noch gut überschaubar.

von Tilo R. (joey5337) Benutzerseite


Lesenswert?

Wenn man in C# programmiert sollte man auch versuchen, die 
C#-Philosophie anzunehmen.
Ein array[] ist eher C-orientiert, in C# verwendet man - wie oben schon 
gesagt - eher Klassen aus dem System.Collections.Generic-Namespace, hier 
List. Die hat dann auch schon verschiedene Komfortfunktionen. Die 
Add-Funktion ist deutlich schneller als deine Array-Implementierung, 
weil die alten Daten nicht kopiert werden müssen. Zusätzlich allokiert 
List gleich Platz für mehrere Einträge.

Ganz unabhängig davon ist es eine schlechte Idee, die Überschrift 
"Sozialversicherungsnummer" mit in die Liste aufzunehmen. Das führt 
dazu, dass du die Liste z.B. nicht mehr sortieren kannst. Besser wäre 
es, deiner Anzeigen-Funktion einen zusätzlichen Überschrift-Parameter 
hinzuzufügen.

von c-hater (Gast)


Lesenswert?

Tilo R. schrieb:

> Ganz unabhängig davon ist es eine schlechte Idee, die Überschrift
> "Sozialversicherungsnummer" mit in die Liste aufzunehmen.

Das auf jeden Fall. Das ist sowas von Excel...

von Ahnungs L. (ahnungsloser_2)


Lesenswert?

1
int i = Array.IndexOf(svn, gessvn);

so klappt's.

zu überprüfen auf: https://dotnetfiddle.net/vLbFbt
1
if (i > 0)

ist eigentlich falsch, aber da svn[] bereits mit einem Element 
initialisiert wurde, geht das.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.