Nummerierung von Datensätzen in ArcGIS (Field Calculator)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Hannah_rrr
User
Beiträge: 1
Registriert: Montag 8. Juni 2015, 14:56

Hallo Python-Freunde,
ich bitte euch als blutiger Programmier-Anfänger und kurz vorm Nervenkollaps um Rat - das Problem ist für Kenner wahrscheinlich ein Klacks, aber mein Kollege und ich haben gerade erst angefangen, Python zu lernen, und beißen uns seit Tagen die Zähne an folgendem Fall aus:
Wir arbeiten in ArcGIS und möchten eine Spalte in einer Attributtabelle mit x Datensätzen in Zehnerblöcken wie folgt durchnummerieren:
A1, A2, A3... A10, B1, B2, B3, ... B10, C1, C2 usw. Er soll also pro Buchstabe immer bis 10 gehen und sich dann den nächsten Buchstaben schnappen (um es nicht noch wirrer zu machen, gehen wir mal von maximal 260 Datensätzen aus; die genaue Anzahl wissen wir aber vorher nicht).
Unser Plan ist es, ihm das Alphabet als Liste zu geben und anschließend mit einer for-Schleife und einer if-Abfrage hochzuzählen. Bislang haben wir uns folgendes überlegt:

Code: Alles auswählen

liste = ["A", "B", "C", "D"]

index = -1
rec = 0
AnzEintraeg = len(liste)

def hochzaehl():
    global rec
    rec = rec + 1
    return rec

for a in range(AnzEintraeg):
    index = index + 1
    for b in range(10):
        if rec == 10:
            rec = 0
        print liste[index] + str(hochzaehl())
Diesen Code setzen wir dann im Field-Calculator in ArcGIS ein. Bei der Feldberechnung kommt allerdings immer nur Quatsch raus, ganz egal, welche Variationen wir versucht haben... mal zählt er ausschließlich mit dem Buchstaben D aufwärts (also D1 bis Dx), mal zählt er die Buchstaben hoch, die Zahlen aber nicht (A0, B0, C0...), mal gibt es direkt einen Error.
Wir haben inzwischen so eine Blockade im Kopf, dass wir uns nur noch im Kreis drehen.
Wisst ihr einen Tipp, wie wir weiterkommen? Ist diese for-Schleife überhaupt die richtige Wahl? Denken wir komplett in die falsche Richtung?
Ich bin dankbar für jeden Rat...
Danke und viele Grüße! - Hannah
Zuletzt geändert von Anonymous am Montag 8. Juni 2015, 15:55, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
BlackJack

@Hannah_rrr: Am besten gleich mal ``global`` vergessen. Und dann auch gleich Variablen und Programm direkt auf Modulebene. So etwas gehört in eine oder mehrere Funktionen.

Die Buchstaben muss man sich nicht selber definieren, die gibt's im `string`-Modul als Konstanten. Beispielsweise das Alphabet in Grossbuchstaben als `string.ascii_uppercase`.

Und dann schreibt ihr euch eine Funktion die eine Zahl zwischen 0 und 260 in eine Zeichenkette der gewünschten Form umrechnet. Dazu braucht man Division und den Rest der Division (Modulo-Rechnung). Die `divmod()`-Funktion ist da sehr praktisch.
Antworten