Xcode Objective-C TextDatei in Variablen schreiben

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Xcode Objective-C TextDatei in Variablen schreiben

    Guten Tag alle zusammen,
    vorab ich bin noch nicht so erfahren in Sachen Xcode
    und der Programmiersprache Objective-C

    ich programmiere derzeit eine IOS App, in der es möglich sein soll deutsche KFZ-Kennzeichenkürzel einzugeben und dazu das dazugehörige Bundesland und die Stadt angezeigt werden soll.
    Nun zu meiner Frage, wie kann ich aus der Textdatei bestimmte Zeilen in jeweils 1 Variable schreiben?
    Die Textdatei ist so aufgebaut:
    Kürzel (Bsp. PL)
    Stadt (Bsp. Plauen)
    Landkreis (Bsp. Vogtlandkreis)
    Bundesland (Bsp. Sachsen)
    Also alles auf eine neue Zeile
    Beispiel: Ich gebe PL ein und nun soll aus der Textdatei in die Variable Stadt: „Plauen“ und in die Variable Bundesland: „Sachsen“ geschrieben werden.

    Ich hoffe ihr könnt mir helfen und ich habe es einigermaßen gut erklärt. LG
  • Dein Dateiaufbau ist etwas ungünstig, einer Zeile pro Kürzel mit Trennzeichen (quasi eine CSV-Datei) oder ein JSON wären leichter. Falls Du das nicht beeinflussen kannst, würde ich wie folgt vorgehen:
    1. Datei in einen NSString einlesen. Dafür gibt es eine Klassenmethode, das Encoding hängt am Zeichensatz Deiner Datei, z. B. NSISOLatin1StringEncoding.
    2. Aufteilen in ein Array von Strings, die durch einen Zeilenumbruch („\n“) getrennt waren … auch einfach mit einer Instanzmethode Deines oben erzeugten NSString-Objektes.
    3. Nun Iterieren über das Array und die Zeilennummer ganzzahlig durch 4 teilen: Wenn der Rest 1 ist, hast Du das Kürzel, bei 2 die Stadt usw.
    4. Nun je Kennzeichen ein NSDictionary mit den Werten unter jeweiligen Schlüsseln speichern und diese in ein NSArray packen.
    5. Fehlerprüfungen sind hier schwer, nur wenn die Anzahl der Zeilen nicht ganzzahlig durch 4 teilbar ist, war die Datei definitiv Schrott.
    6. Wenn alles läuft und Du Dich sicherer fühlst, das Thema Core Data angehen :)
    Sollte Dir die Datei nur einmalig vorliegen oder Du Einfluss auf deren Format haben, würde ich mir die Arbeit der Umformatierung machen: Mit vernünftigen Editoren und Tabellenkalkulationen kann man einiges recht schnell erreichen. Dann könntest Du ein JSON z. B. direkt in ein Array von Dictionaries einlesen, deren Key-Value-Paare den Attribute entsprechen. Oder Du kannst zumindest je Zeile Kürzel in ein Dictionary speichern.

    Mattes

    P.S.: Das Ganze natürlich nur einmal initial und dann im Array nach dem eingegebenen Kürzel suchen … per NSPredicate.
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • dir frage ist woher beziehst du die Daten? In welchem Format sind diese dann?

    normalerweise würde man solche Daten im JSON oder zumindest XML Format erwarten. Dann kann man diese mit nur einem Funktionsaufruf in ein Array von Objekten wandeln und dann wieder mit einem einfachen Array Filter commando das Ergebnis holen.

    normalerweise wäre deine App nicht viel länger als 10 Zeilen Code
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • MovieHoshi schrieb:

    Ich habe eine TXT-Datei, die ich in mein Projekt geladen habe.
    Wenn Du über eine JSON-Datei gehen möchtest, müsstest Du diese Text-Datei in ein solches Format umwandeln (die Reihenfolge der Key-Value-Paare ist egal):

    Quellcode

    1. [
    2. {
    3. "Bundesland" : "Sachsen",
    4. "Kuerzel" : "PL",
    5. "Landkreis" : "Vogtlandkreis",
    6. "Stadt" : "Plauen"
    7. },
    8. {
    9. "Bundesland" : "NRW",
    10. "Kuerzel" : "ME",
    11. "Landkreis" : "Mettmann",
    12. "Stadt" : "Monheim"
    13. }
    14. {
    15. ...
    16. }
    17. ]
    Alles anzeigen

    Dann kannst Du dieses sehr schnell / mit wenigen Zeilen in ein Array von Dictionaries einlesen, ohne selber parsen zu müssen.

    Bei einem CSV ("comma-separated values") sähe die Datei z. B. so aus (die Reihenfolge der Werte ist nicht egal):

    Quellcode

    1. "Sachsen", "PL", "Vogtlandkreis", "Plauen"
    2. "NRW", "ME", "Mettmann", "Monheim"
    3. ...
    Hierbei gibt es auch Varianten mit Feldnamen in einer Kopfzeile. Dort musst Du dann selber die Zeilen an den Kommata zerlegen, die Zeichenketten extrahieren und den Schlüsseln aus dem Dictionary zuweisen. Geht auch, ist aber mehr Aufwand beim Programmieren.

    Wenn die Daten eh statisch sind und nur einmalig importiert werden, ist es letztlich eine Entscheidung, in was Du mehr Zeit investieren möchtest: Daten umformatieren und einfachen Code habe oder Daten "as-is" zu übernehmen und im Code individuell angepasst einlesen. Normalerweise versucht man, sich auf standardisierte Austauschformate zu einigen und landet oft beim JSON oder - wie @Thallius schrieb - XML.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Warum heutzutage alle gleich an CSV, JSON, (selbstdefiniertes) XML denken... SQL wurde immerhin nicht vorgeschlagen.
    Dabei kann man solche statischen Daten auch sehr schön in einer Property List in den Resources speichern. Diese kann man dann direkt in Xcode editieren.
    Man macht dann das Kürzel zum Key und zu jeder Zeile ein NSDictionary mit den Elementen. Das Ganze liest man in ein NSDictionary ein.
    Dann reicht zum Suchen ein einfacher Zugriff per Schlüssel um wieder ein NSDictionary mit den Elementen zu bekommen. Das sind dann bereits NSString.
    Wenn es erweitert werden soll dass man nach beliebigen Feldern suchen kann, dann wäre natürlich ein NSArray aus NSDictionary-Einträgen praktischer.
    Grob (aus dem Gedächtnis getippt) folgendermassen:

    Quellcode

    1. NSDictionary *dict=[NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"tabelle" ofType:@"plist"]];
    2. NSDictionary *eintrag=[dict objectForKey:@"PL"];
    3. NSString *stadt=[eintrag objectForKey:@"stadt"];
  • hns schrieb:

    Warum heutzutage alle gleich an CSV, JSON, (selbstdefiniertes) XML denken... SQL wurde immerhin nicht vorgeschlagen.
    Dabei kann man solche statischen Daten auch sehr schön in einer Property List in den Resources speichern. Diese kann man dann direkt in Xcode editieren.
    Naja, da sehe ich den Unterschied zu einem JSON nicht wirklich, welches den Vorteil hat, einem plattformübergreifenden Standard zu entsprechen. Letztlich alles nur Lösungs-Optionen, wobei ich CSV genauso schlecht wie das ursprüngliche Dateiformat findet - aber manchmal kann man es sich nicht aussuchen.

    Stimmt, SQL fehlte noch ... aber ich habe ja zumindest für die Version 2.0 auf Core Data hingewiesen :D

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Plists im XML-Format sind auch ein plattformübergreifendes Standardformat.
    Nur dass man sie auf dem Mac und in Xcode direkter bearbeiten kann.
    Ich sehe den Hauptvorteil darin, dass man einfach ein NSDictionary oder NSArray direkt initialisieren kann (dictionaryWithContentsOfFile.)
    Soweit ich weiss (viellicht hat sich das inzwischen geändert) geht das mit JSON und Bordmitteln oder den meisten anderen Ansätzen nicht so elegant.
    Was man letztendlich nimmt folgt natürlich immer aus einer Abwägung zwischen Codieren und Daten erzeugen/austauschen.
    Das dürfte für jedes Projekt anders ausfallen.
    Manchmal sogar je nach Entwicklungsstand eines Projekts. Dann muss man das nachträglich umbauen.