Doppelte Namen nummerieren

Hallo!

Ich lese aus einer Datei der Reihe nach (Nach)namen ein und werden dann auf maximal sechs Zeichen gekürzt. Die Namenskürzeln sollen dann noch mit einer Nummer am Schluss versehen werden.
Zum besseren Verständis noch ein Beispiel: Der Name „Kammerer“ wird ausgelesen, gekürzt (–>„kammer“) und mit einer Nummer versehen (–>„kammer1“). Dann kommt der Name „Meier“ --> „meier“ --> „meier1“. Später wird dann noch einmal ein „Meier“ gelesen, und bekommt „meier2“.

Dieses Problem ist Teil eines kleinen Projekts, das ich in VB.NET realisiere. Jetzt hätte ich von euch gerne ein paar Tipps oder ähnliches gehört, wie ich das am besten löse.

mfg
chris

P.S.: Bei Nachfragen ruhig nachfragen.

Hallo Christoph,

hatte mal was ähnliches. Da ich gerade kein VS dahabe und sowieso c# verwenden würde (für mich einfacher) nur ein Ansatz:

Die Routine, die die Namen einliest, übergibt diesen an eine Function die die Zahl zurückgibt.

Diese baut die notwendige Liste zur Kontrolle als Array auf.

Sofern der Name nicht in der Liste gefunden wird diesen ergänzen und zweite Spalte auf 1 setzen. 1 zurückgeben.

else

In der zweiten Spalte den Index um 1 erhöhen und den neuen Wert zurückgeben.

Hoffe das Hilft.

Morgen schaue ich nochmal rein …

mfg

Dirk

Hi,
mir war grad fad…

using System;
using System.Collections;

class X {
 private static Hashtable lookupTable = new Hashtable();

 private class Entry {
 public int value;

 public Entry(int value) {
 this.value = value;
 }
 }

 public static string DoIt(string s) {
 Entry val;

 s = s.Trim();
 if (s.Length \> 6) {
 s = s.Substring(0, 6);
 }

 if ((val = (Entry)lookupTable[s]) == null) {
 val = new Entry(0);
 lookupTable[s] = val;
 }
 val.value++;

 return String.Format("{0}{1}", s, val.value);
 }
}

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo!

Hi,
mir war grad fad…

[Code gespart]

Dein Quellcode hat mich auf die richtigen Weg mit einer Hashtable gebracht. Ich habs nur ein bisserl abändern müssen, da ich das ganze mit VB.NET mache.

Vielen Dank nochmal.
mfg
chris