ASCII Dateien einlesen

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

  • RE: ASCII Dateien einlesen

    Original von donadm

    2- 7 I6 --- PPM *[700001/789676]+ Designation of the star
    10-18 A9 --- DM *Durchmusterung, BD or CD
    20-23 F4.1 mag Mag *Magnitude, Visual if Flag5 is 'V'
    25-26 A2 --- Sp *Spectral type
    28-29 I2 h RAh Right Ascension for the Equinox=J2000.0 5
    31-32 I2 min RAm Right Ascension J2000 (minutes)
    34-39 F6.3 s RAs Right Ascension J2000 (seconds)
    42 A1 --- DE- Declination J2000 (sign)
    43-44 I2 deg DEd Declination for the equinox and epoch
    ...


    hier stehen Byte-Bereiche, was für welche Daten reserviert ist.

    * Da es hier um grosse Datenmengen geht (die zusäzlich zur Laufzeit des Programms "fliessen"
    müssen), müsste ich mir Strategien zur Verarbeitung überlegen? Evtl. könnte man das Ganze
    in eine Datenbank importieren, doch hier sehe ich die Gefahr, das das "Lesen" zu langsam geht?


    Hi donadm,

    das sind Fortran-Formate.

    Den einfachsten und effektivsten "Importer" würde man demzufolge in Fortran schreiben.
    Dadurch wäre auch garantiert, daß die Formate exakt genau so interpretiert würden wie die Datenquelle das vorsieht. Dein Format ist ja statisch, und genau darauf ist die Fortran "format"-Anweisung spezialisiert.

    Für den gcc, der von Xcode verwendet wird, gibt's auch einen Fortran-Compiler.
    Fotran-Objekte lassen sich einfach mit C/C++/ObjC zusammenlinken.
    Datenübergabe in Form von C-Arrays.

    Über die C-Arrays könnte man dann Schlüssel-Indizes anlegen (C++ oder Objective-C Maps), die als Schlüssel halt den gewünschten Schlüssel bekommen und als Wert den Index ins Array.

    gruß kisch
  • RE: ASCII Dateien einlesen

    hallo gitsch,

    ja danke für den Hinweis, sehr Hilfreich..


    Dadurch wäre auch garantiert, daß die Formate exakt genau so interpretiert würden wie die Datenquelle das vorsieht.

    Kurze Gegenfrage, wie sieht die Datenquelle das denn vor?
    Wenn ich ehrlich bin verstehe ich es eh nicht so, ich könnte mir nur abstrakt vorstellen,
    das zB beim Ersten das "I6" bedeutet, Integer 6Byte oder 6Zeichen oderso?
    Beim Zweiten"A6" dann Ascii 6 Zeichen, und das "F4.1" evtl Float.


    Für den gcc, der von Xcode verwendet wird, gibt's auch einen Fortran-Compiler.

    1) was ist der gcc? Ist das der Compiler, der den Quelltext in Maschinencode übersetzt?
    2) Wo gibs den Fortran Compiler? Im Netz, auf meinem Rechner?
    3) Wie geh ich da vor, muss ich erst ein Programm in Fortran schreiben, das Compulieren und dann irgendwie mit Objective-C verbinden?
  • Original von donadm
    Frage, arbeitet ihr auch nach dem MCV(Model-Controller-View) Paradigma?
    Oder ist das für den anfang nur recht hilfreich?

    MVC: Immer! Das ist keine Anfängerkrücke, im Gegenteil. Später kann man sich den größten Teil der Controller-Implementation durch Bindings sparen, aber das Konzept bleibt das gleiche.
    Multigrad - 360°-Produktfotografie für den Mac
  • ja, gcc ist der compiler.

    ich würd dir raten die finger erstmal vo fortran zu lassen weil man muss ja nicht alles auf einmal lernen.

    verwende lieber die fscanf methode.

    das ist am eifnachsten: datei mit fopen öffnen, fscanf so lange durchlaufen lassen bis er nix mehr fidnet in der datei. und mit fclose die datei schließen.

    hier kurze info zu fscanf: opengroup.org/onlinepubs/009695399/functions/fscanf.html
  • Original von gritsch
    ich würd dir raten die finger erstmal vo fortran zu lassen weil man muss ja nicht alles auf einmal lernen.
    ...
    das ist am eifnachsten: datei mit fopen öffnen, fscanf so lange durchlaufen lassen bis er nix mehr fidnet in der datei. und mit fclose die datei schließen.


    Naja, wer weiß, ob alle Fortran-Format-Anweisungen ein exaktes fscanf-Gegenstück haben.
    Vermutlich ja, klar. Aber wer kennt sich schon genau mit Fortran aus (ich nicht ;)

    Andererseits bringt googeln nach genau der Sequenz der Formate (I6 A9 F4.1 usw.) tausende Fundstellen mit fertigen astronomischen Fortran-Sourcen, die man zum Einlesen benutzen könnte (und wahrscheinlich gleich noch für die Projektionsberechnungen für die Sternkarte dazu).

    Für fscanf würde ich mal googeln, ob sich nicht C-Sourcen finden, die eine Fortran-Format-Liste fertig in eine gleichwertige fscanf-Liste übersetzen. Ein "fscanfortran()" für C quasi. fscanf() ist nur nicht so schnell wie Fortran nativ.

    gruß kisch
  • RE: ASCII Dateien einlesen

    Original von donadm

    Dadurch wäre auch garantiert, daß die Formate exakt genau so interpretiert würden wie die Datenquelle das vorsieht.

    Kurze Gegenfrage, wie sieht die Datenquelle das denn vor?


    Weiß ich auch nicht. Deshalb würde ich das aus reiner Faulheit dem Fortran-Compiler überlassen, der kennt die Formate. Andernfalls müßte man erst Fortran lernen oder wenigstens die Doku zum Fortran "format()" nachschlagen, um sicherzugehen, daß man alle Felder richtig interpretiert.


    Wenn ich ehrlich bin verstehe ich es eh nicht so, ich könnte mir nur abstrakt vorstellen,
    das zB beim Ersten das "I6" bedeutet, Integer 6Byte oder 6Zeichen oderso?
    Beim Zweiten"A6" dann Ascii 6 Zeichen, und das "F4.1" evtl Float.


    Ja, das würde man vermuten.
    Wenn aber jetzt noch "X3.4 ZYZY5" auftaucht, kann man nichtmal mehr raten ;)

    gruß kisch
  • hi,
    ja danke,
    hatt mir auch schon gedacht, das ich mit noch einer Programmiersprache etwas überfordert wäre:)

    Ich hab jetzt, der Einfachheit halber mal ein erstet Projekt gestartet:

    1) hab ein NSTextView und ein NSButton auf mein Window gezogen
    2) habe 2 Klassen erstellt im .Nib Browser
    MyController und MyModel

    3) hab bei MyConroller zwei Outlets definiert "textInput:Type NSTextView" und "model Type:MyModel" und ein Aktion "import:"

    4) hab MyController und MyModel instanziert
    5) hab MyConroller(instanz) mit meinem NSTextView(auf dem Window) verbunden (ctrl. click)und "connect" geklickt
    6) hab MyConroller(Instanz) mit meinem Model(MyModel) verbunden und "connect" geklickt
    7) mit meinem Button"import" hab ich eine Linie zu "MyController" gezogen, und "connect" geklickt.

    wenn ich das ganze Starte bekomme ich:

    Quellcode

    1. [Session started at 2007-02-08 04:03:11 +0100.]
    2. 2007-02-08 04:03:12.293 Testtext[13426] Unknown class `MyController' in nib file, using `NSObject' instead.
    3. 2007-02-08 04:03:12.295 Testtext[13426] Unknown class `MyModel' in nib file, using `NSObject' instead.
    4. 2007-02-08 04:03:12.297 Testtext[13426] Could not connect the action import: to target of class NSObject

    Auch bin ich mir nicht Sicher mit dem Button? Muss ich vom Button zur Instanz oder von der Instanz (im .Nib Browser) zum Button die Verbindung ziehen?
  • ok, hab ich, jetzt hab ich :

    Parse Error for for "MyModel"

    Quellcode

    1. /* MyController */
    2. #import <Cocoa/Cocoa.h>
    3. @interface MyController : NSObject
    4. {
    5. [B]IBOutlet MyModel *model;[/B]
    6. IBOutlet NSTextView *textInput;
    7. }
    8. - (IBAction)import:(id)sender;
    9. @end
    Alles anzeigen


    hm?
  • so, nun möcht ich die Hauptfunktion "import" machen.
    Mien Code sieht nun s aus:
    MyController.h

    Quellcode

    1. /* MyController */
    2. #import <Cocoa/Cocoa.h>
    3. #import "MyModel.h"
    4. @interface MyController : NSObject
    5. {
    6. IBOutlet MyModel *model;
    7. IBOutlet NSTextView *textInput;
    8. }
    9. //Definition des Buttons
    10. - (IBAction)import:(id)sender;
    11. @end
    Alles anzeigen

    Diese hab ich jetzt auf mei meinem Button reingeschrieben undzwar bei "MyController.m"

    Quellcode

    1. #import "MyController.h"
    2. @implementation MyController
    3. - (IBAction)import:(id)sender
    4. {
    5. //Was macht der Action-Button und welche
    6. //Variablen hält er..
    7. float gibt;
    8. NSString *appPath =[[NSFileManager defaultManager] currentDirectoryPath];
    9. NSString *s=[NSString stringWithContentsOfFile:[appPath stringByAppendingString:@"/bsc2000.txt"]];
    10. NSArray *lines=[s componentsSeparatedByString:@"\n"]; // ggf. \r\n nehmen!
    11. NSEnumerator *e=[lines objectEnumerator];
    12. NSString *line;
    13. while((line=[e nextObject]))
    14. {
    15. NSArray *components=[line componentsSeparatedByString:@","];
    16. // componentns verarbeiten...
    17. }
    18. gibt = [model machWas:1.0 Und:2.0];
    19. [textInput initWithFrame:gibt];
    20. }
    21. @end
    Alles anzeigen


    bei : gibt = [model machWas:1.0 Und:2.0]; ist nur ein Test, das geht sowieso nicht.
    Was ich aber machen möchte ist, eben, irgendwas in meinem NSTextView ausgeben ("textInput") ,
    am besten eben die einzelnen Lines die ich ja in der while-Schleife durchlaufe.
    Wie kann ich das machen?
  • a) Manuell: Ändert sich etwas im Model, so muss dies der Controller abholen und im View setzen. Das bedeutet bei größeren Applikationen viel Arbeit und ist schlecht zu warten.

    b) Data-Sources: Du implementierst ein Objekt, welches NAchrichten vom View bekommt, wenn eine Änderung notwednig ist.

    c) Bindings: Du verwendest die Standard-Bindings-Controller von Cocoa.

    Aber ehrlich gesagt enthält dein Code einige Perlen. Du solltest wirklich dir grundlegenden Dinge noch einmal durchackern.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • hi Tom,
    ich verstehe viel von den Sachen, was du sagst, nur schlecht, bis fast garnicht,

    ich hab grad mal den Currency Converter fertiggebaut und versuch so alles erstmal zusammen zu bekommen, also Klasse, Klasse instanzieren, Outlets und Actions bestimmen, Source-Fiels erstellen.
    Noch dazu ist mir noch garnicht klar, wozu eigentlich die .h bzw .m Dateien gut sind, warum man das überhaupt aufteilt? Ich hab leider kein Background in C-Programmierung, kenne mich weder mit Klasse, Typen noch sonst irgendwelche Sachen von C geschweige denn in Objective-C aus ?

    Wie gesagt hab ich vornehmlich in Actionscript programmiert, doch das hat ja nix mit C zu tun?

    Ich bin eh schon am Lesen wie blöd aber soweit ich weiss, reicht das Lesen einfach nicht aus, beim Programmieren (so kenn ich's zumindest) muss man eben ständig probieren und probieren und probieren, ich weiss nicht, wieviel tausendemal ich meine Programm starte und ständig schaue, ob alles läuft (bestimmt einige tausend mal?) Die Erfahrung kommt dann über die Zeit und dann weiss man schon intuitiv, ob was "richtig oder falsch" aussieht.

    Ist schon klar, das man eine gewisse Lernkurve meistern muss aber grade am Anfang sind alle Begriffe die neu sind wie "Bindings","Outlets" usw. erstmal zu verdauen und das heisst auch für mich, meine Erfahrungen damit zu machen, sprich was geht damit? Wie kann man es verstehen? Hab ich's richtig verstanden usw.
    Leider ist die Hife(Developer Documentation) nicht besonders ergiebig was Beispiele betrifft, wo ich mich als Anfänger schnell per copy-past durcharbeiten könnte. Stattdessen wird eben viel über die Klassen und Methoden viel geredet, was warscheinlich, im weiteren Sinn, doch ganz nützlich sein kann, wenn man mal das Grundprinzip verstanden hat.

    Ok, wenn ich versuche dein Fragen zu verstehen
    a) OK, abstrakt kann ich mir vorstellen, das der Controller für die Darstellung im View, sprich Window mit Button, Textviews ect. ist. Aber was hab ich denn da falsch gemacht?
    b) Welche Data-Source? Wo implementiere ich welches Objekt?
    c) Tue ich das? Oder sollte ich das tun?

    Hmm, ich frag mich grade, wieso gibt es hier denn eigentlich kein "Cocoa für Anfänger"-Forum in diesem Forum ?
    Ich hab immer das unterschwellige Gefühl, als würden hier manche Sachen schon vorrausgesetzt oder bin ich in der falschen Karthegorie? Vielleicht sollte ich es eher unter "Cocoa und Objective C " posten?
  • Learning by doing ist ja nicht falsch. aber es stellt sich die Frage, wie weit man damit kommt. Und Grundprinzipien erlernen sich schlecht durch Übung.

    Also, um es kurz zu machen und ein paar Begriffe zu klären:

    Du hast in deinem Model Entitäten. Das sind Objekte, die sich dadurch auszeichnen, dass sie Eigenschaften (Attribute) und Beziehungen (Relationships) haben. Du hast etwa den Entitätstypen Stern, der die Attribute Lage usw. hat. Dann wirst du den Entitätstypen Stern haben, der jede Menge Verweise auf Entitäten von Stern hast.

    Objektarten
    In Objective-C haben wir es also mit Objekten zu tun. Aber das kann man natürlich
    auch detaillierter betrachten.

    Klassen- und Instanzobjekte
    Bisher war immer von Objekten die Rede. Dabei unterscheidet Objective-C zwischen
    zwei Typen von Objekten: Die üblichen Objekte sind Instanzobjekte – oder kurz: Ins-
    tanzen. Sie sind Objekte im klassischen Sinne mit Daten und Operationen, die über
    Methoden ausgeführt werden.
    Sie haben bereits gelernt, dass jedes Objekt eine Klasse hat, die gewissermaßen den
    Typ des Objektes angibt. In Objective-C ist diese Klasse jedoch wiederum ein Objekt,
    ein Klassenobjekt. Solche Klassenobjekte besitzen keine Daten, sondern nur Operati-
    onen. Sie werden auch nicht im Programm von Ihnen erzeugt, sondern sind »einfach
    da«. Jedes genau einmal. Diese Eigenarten kann man zuweilen nützlich einsetzen. Für
    Sie reicht es an dieser Stelle aus, den praktischen Nutzen zu kennen:
    < Klassenobjekte erzeugen die Instanzobjekte. Das wird etwas später erläutert.
    85
    kaPitel 3c und oBjective-c
    < Klassenobjekte stehen stellvertretend für ein im System nur einmal existierendes
    Ding.
    So steht das Klassenobjekt NSApplication für unser Programm. In unserem Pro-
    gramm gibt es das Programm ja nur einmal. NSUserDefaults steht für unsere Pro-
    grammeinstellungen, die es pro Programm ebenfalls nur einmal gibt.
    Man nennt solch einmalige Objekte Singletons. Wenn man eine Eigenschaft oder
    eine Fähigkeit eines Objektes benutzen will, so muss man stets gerade das entspre-
    chende Objekt zur Hand haben. Es ist nicht immer leicht, es zu finden, wenn es von
    der gleichen Klasse mehrere Objekte gibt. Da jedoch Singletons wie Klassenobjekte
    stets nur einmal existieren, kann es keine Verwechslung geben. Man kann überall im
    Programm einfach das Klassenobjekt benutzen. Die Anwendung ist denkbar einfach:
    Statt des Namens einer Variablen schreibt man einfach den Namen der Klasse hin.
    Will man etwa wissen, in welches unserer vielleicht zahlreichen Fenster der Nutzer
    schreiben kann, so schreibt man einfach [NSApplication keyWindow]. Sie lösen damit
    das Konzept der globalen Variablen ab, die für ihre Fehleranfälligkeit berühmt und
    berüchtigt sind.
    Entitäten und Container
    Die Instanzobjekte kann man wiederum in zwei Arten unterteilen: Entitäten und
    Container. Beide bestehen aus – da sie Instanzobjekte sind – Daten und Operationen.
    Der Unterschied liegt in der Organisation der Daten. Entitäten haben Eigenschaften,
    denen wir Namen geben. Im vorangegangenen Beispiel hat ein Instrument die Ei-
    genschaften Art, Preis und Alter. Diese Beziehung zwischen Eigenschaft und ihrem
    Namen ist übrigens typisch für Ihre Programmierarbeit. Sie erstellen fast immer
    Entitäten.
    Dies ist aber nicht bei allen Objekten so. Manche Objekte dienen uns nur als Ablage
    für irgendwelchen Daten-Krimskrams. Sie haben doch sicher auch so eine Küchen-
    schublade, in der sich alles Mögliche tummelt: Container. Man kann da keine Eigen-
    schaften benennen. Wichtigstes Beispiel sind Objekte der Klasse NSString. Ein String
    ist ein unformatierter Text, ein Zeichenwurm. Da gibt es keine Eigenschaften. Wel-
    che auch? Daneben existieren »Sporttaschen«. Sie können einen ganzen Haufen von
    Objekten sammeln. Der wichtigste Fall ist hier NSArray. Hierbei werden einfach alle
    ÜAuFGepAssT
    In diesem Buch wird häufig von Objekten die Rede sein. Damit sind hier stets die
    Instanzobjekte gemeint. Dieser in Objective-C eigentlich etwas unscharfe Begriff
    hat sich so eingebürgert. Wenn es wie hier gerade darauf ankommt, wird dies na-
    türlich klargestellt.
    86
    SmartBookS oBjective-c und cocoa – Programmieren unter aPPle mac oS X
    gesammelten Objekte durchnummeriert. So sieht die Liste der wichtigsten Klassen
    aus, mit denen Sie es früher oder später zu tun bekommen:
    Klasse Beschreibung Beispiel
    NSString Einfacher TextNamen, Buchtitel, Erläuterungen
    NSValue Jede Art von numerischen WertenBereiche (Von-Bis),
    Koordinatenangaben (x,y)
    NSNumber ZahlenGanze Zahlen, gebrochene Zahlen
    NSSet Unsortierte Sammlung von einmaligen ObjektenListe
    der lieferbaren Produkte (Jedes Produkt wird nur ein-
    mal aufgeführt!)
    NSCountedSet Unsortierte Sammlung von Objekten, Doppel er-
    laubtLagerbestand (Jedes Produkt kann mehrfach auf
    Lager liegen!)
    NSArray Nummerierte Sammlung von ObjektenNummerierte
    Klassenliste
    NSDictionary Sammlung von Objekten, bezogen auf ein anderes
    Objekt.Telefonlisten (Nummern bezogen auf Namen.
    Der Name darf immer nur einmal verwendet werden,
    die Telefonnummer mehrfach.)
    Diese Container werden im Kapitel – na, raten Sie mal – Container näher bespre-
    chen. Sie selbst erstellen so gut wie nie solche Klassen, sondern benutzen sie einfach
    in Ihrem Programm.
    87
    kaPitel 3c und oBjective-c
    So kompliziert sind sie gar nicht, die verschiedenen Arten von Objekten.
    »Swinger-Club« für Objekte – Attribute und Beziehungen
    Wie dargestellt besitzen Entitäten Eigenschaften. In unserem Beispiel waren die ge-
    nannten Eigenschaften Art, Alter und Preis. Diese Eigenschaften beschreiben das In-
    strument. Man nennt sie daher Attribute. Daneben können Eigenschaften aber auch
    in Beziehungen zu anderen Entitäten bestehen. Nehmen wir an, dass wir nicht nur
    jede Menge Instrumente in unserem Programm haben, sondern auch Musikanten.
    Ein Musikant wäre kein Musikant, wenn er nicht ein Instrument spielen könnte. Also
    hat er die Eigenschaft KannInstrumentXSpielen. Diese Eigenschaft verweist von einer
    Entität (Musikant) auf eine andere Entität (Instrument). Man nennt dies eine Bezie-
    hung oder Relation.
    Die Beziehungen kann man übrigens wiederum nach ihrer Komplexität unterteilen:
    Einfachstes Beispiel: Jede Ehefrau hat genau einen Mann. Jeder Mann hat genau eine
    Frau. Diese Beziehung nennt man 1-zu-1-Beziehung (1:1-Beziehung).
    ÜGruNDLAGeN
    Es gibt vereinfacht einen (allerdings nicht zwingenden) Zusammenhang zwischen
    Attributen und Relationen einerseits und Entitäten und Containern andererseits:
    Attribute sind der Verweis einer Entität auf einen Container, etwa Musikant (Enti-
    tät) und sein Name (Container NSString). Relationen sind Verweise einer Entität
    (Musikant) auf andere Entitäten (Instrument).
    88
    SmartBookS oBjective-c und cocoa – Programmieren unter aPPle mac oS X
    Häufigster Fall in der Programmierung ist jedoch, dass eine Entität sich auf mehrere
    andere Entitäten bezieht. Beschreiten wir jetzt doch den Weg nicht-westlicher Gesell-
    schaften und schauen uns die Polygamie an: Dort kann eine Frau mehrere Ehemänner
    haben. Man bezeichnet eine solche Beziehung auch als 1-zu-n-Beziehung (1:n-Be-
    ziehung). Schließlich können wir es ganz kompliziert machen. Ohne einen Rest sitt-
    lichen Anstands zu verlieren, erkennen wir die »Gruppenehe« an. Bei dieser kann ein
    Mann mehrere Ehefrauen haben (1:n-Beziehung) und eine Ehefrau mehrere Männer
    (1:m-Beziehung). Man nennt dies eine n-zu-m-Beziehung (n:m-Beziehung).
    In Programmen geht es unsittlich zu.
    Diese Beziehungsarten sind aus der Datenbankentwicklung entstanden. Und wir dür-
    fen bei der objekt-orientierten Anwendungsentwicklung etwas vereinfachen: Häufig
    speichert man eine Beziehung nur in eine Richtung, nehmen wir an von Entität Ehe-
    frau zur Entität Ehemann. Damit kann man zusammenfassen:
    Vom Standpunkt der Frau aus gibt es nur zwei Beziehungsarten.
    Es gibt also nur noch die Fälle, in denen entweder eine Frau auf einen Mann verweist
    (Einehe) oder eine Frau auf mehrere Männer verweist (Vielehe und Gruppenehe).
    Dementsprechend nennt man die einfache Beziehung Master-Detail-Relationship,
    die mehrfache Beziehung To-Many-Relationship. Eine Gruppenehe unterscheidet
    sich von der Vielehe lediglich dadurch, dass mehrere Pfeile auf einen Mann zeigen.
    Dies ist jedoch für die Frau, deren Klasse wir ja programmieren, unbeachtlich.
    kaPitel 3c und oBjective-c
    Wenn wir jedoch genau die umgekehrte Blickrichtung betrachten, so stellt sich für
    den Mann, dessen Klasse wir auch programmieren müssen genau das umgekehrte
    Bild dar:
    Bei der Rückbeziehung Mann zu Frau stellt sich die Lage anders dar.
    Die Quintessenz ist also, dass 1:1-, 1:n- und n:m-Beziehungen je vom Standpunkt aus
    Master-Detail- oder To-Many-Relationships sind, da die Beziehungen ja auch Eigen-
    schaften sind. Wir haben es also nur mit diesen Beziehungstypen zu tun.
    Auch Xcode kann derlei Beziehungsmuster, Entity-Relationship-Model (ERM) ge-
    nannt, grafisch darstellen:
    Und wenn wir uns von Xcode auch noch die Rückverweise anzeigen lassen, dann
    wird die Sache klar:
    Die einfache Pfeilspitze zeigt, dass es
    sich um eine Master-Detail-Beziehung
    handelt.
    Die doppelte Pfeilspitze zeigt die To-
    Many-Beziehung an.

    Mit Bindingas kannst du einem View Attribute einer Entität anzeigen lassen. Der Controller übernimmt dabei die Aufgabe, die Objekte aus dem Model zu holen, Selektionen durchzuführen pp.
    aus Rodewig/Negm, Objective-C und Cocoa.
    Ich bitte die fehlenden Bilder und den mangelhaften Umbruch zu entschuldigen. So kommt das aus Vorschau.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • danke für deinen langen Beitrag,
    ok, über die Eignenschaften von Klassen und Objekten hab ich einiges gelernt,
    doch wie ist eigentlich die Lebensdauer der Objekte? Also wenn ich sie nicht mehr haben will?
    Was mach ich dann?

    Aber neben all dem Theoretischen, jetzt weiss ich absolut nicht, was ich machen soll?
    Wie bekomme ich denn nun mein Array oder sonstwas in mein NSTextView? Es muss doch eine Methode geben, das man Text anzeigen kann ?
    Mein Textview hab ich ja schon da:

    Quellcode

    1. IBOutlet NSTextView *textInput;
  • Original von donadm
    wie ist eigentlich die Lebensdauer der Objekte? Also wenn ich sie nicht mehr haben will?
    Was mach ich dann?


    Ein langes Gesicht.
    Objekte leben solange, bis sie niemand mehr haben will.
    Wenn du deinem Objekt 'Hau ab' sagst, verringert sich die Zahl derer, die das Objekt haben wollen.
    Wenn sie niemand mehr haben will fliegen sie automatisch aus dem Speicher.
    Auch dazu gibt es genügend Literatur, sowohl im Forum als auch außerhalb. ;)

    [myObject retain] = Ich brauch dich noch...
    [myObject release] = Jetzt nicht mehr!

    Original von donadm
    Aber neben all dem Theoretischen, jetzt weiss ich absolut nicht, was ich machen soll?


    Das Gefühl wirst du noch öfter haben... ;)
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • danke gritsch,
    jetzt hab ich meinen Text in dem NSTextView :)

    Mein Code bisher:

    Quellcode

    1. - (IBAction)import:(id)sender
    2. {
    3. //Was macht der Action-Button und welche
    4. //Variablen hält er..
    5. //Pfad in String ablegen
    6. NSString *appPath =[[NSFileManager defaultManager] currentDirectoryPath];
    7. //Gesammte Datei einlesen und in String "s" speichern
    8. NSString *s=[NSString stringWithContentsOfFile:[appPath stringByAppendingString:@"/ppm3.dat"]];
    9. //Gesammtstring nach Zeilenumbruch "\n" zerlegen und dies in Array speichern
    10. NSArray *lines=[s componentsSeparatedByString:@"\n"]; // ggf. \r\n nehmen!
    11. //Erstellt einen enumerator=Zähler Objekt, bzw. gibt das die Methode
    12. //objectEnumerator zurück
    13. NSEnumerator *e=[lines objectEnumerator];
    14. //Ein String für die Zeilen
    15. NSString *line;
    16. //Mit der Methode nextObject des Enumerators
    17. //wird jeweil ein Element weiter gezählt
    18. //Wenn kein Element mehr vorhanden, dann nil
    19. while((line=[e nextObject]))
    20. {
    21. //Der String "line" wir aufgeteilt un in ein Array gelegt
    22. NSArray *components=[line componentsSeparatedByString:@","];
    23. // componentns verarbeiten...
    24. }
    25. //in das NSTextView wird der String gelegt
    26. [textInput setString:s];
    27. }
    Alles anzeigen

    Die 90 000 Zeilen der Textdatei werden relativ schnell (1,33GHz,G4) eingelessen 2-3 Sek.
    wenn ich alldings als seperator zB: " " nehme, dauert es um einiges Länger.

    @Lucas de Vil
    ...mühsam nährt sich das Einhörnchen
  • so in etwa kannd as aussehen. Variablen natürlich ordentlich benennen und das format richtig angeben (zb dass es keine probleme gibt wenn anstele eines wertes nur leerzeichen stehen etc...
    Sobald du das format für die ganze zeile zusammengestellt hast kannst du das fscanf so lange aufrufen bis es dir 0 zurückgibt (bedeutet dass es nicx mehr einzuscannen gab). Naj jede, durchlauf von fscanf packst du dir die geholten werte in ein objekt oä!

    Quellcode

    1. FILE *file = fopen("/Users/gritsch/Desktop/Downloads/ppm3.dat", "r");
    2. char w5[3];
    3. float w4;
    4. int wert2;
    5. unsigned wert1, w3;
    6. printf("n: %i\n",fscanf(file, "%6d %3i %5d %f %s", &wert1, &wert2, &w3, &w4, w5));
    7. NSLog(@"wert: %i : %i : %i : %4.1f : %s", wert1, wert2, w3, w4, w5);
    8. fclose(file);
    Alles anzeigen
  • so,
    mitlerweile hab ich ein neues Format gefunden und lese meine Daten jetzt
    so ein:

    Quellcode

    1. - (IBAction)import:(id)sender
    2. {
    3. NSString *appPath =[[NSFileManager defaultManager] currentDirectoryPath];
    4. ///bsc2000.txt
    5. NSString *s=[NSString stringWithContentsOfFile:[appPath stringByAppendingString:@"/SAO.dat"]];
    6. NSArray *lines=[s componentsSeparatedByString:@"\n"]; // ggf. \r\n nehmen!
    7. NSEnumerator *e=[lines objectEnumerator];
    8. NSString *line;
    9. int counter;
    10. counter = [lines count];
    11. NSLog(@"x = %d" , counter);
    12. while((line=[e nextObject]))
    13. {
    14. NSArray *components=[line componentsSeparatedByString:@";"];
    15. // componentns verarbeiten...
    16. }
    17. NSString *auswahlZeile;
    18. auswahlZeile = [lines objectAtIndex: 0];
    19. NSLog(auswahlZeile);
    20. //String setzen:
    21. [textInput setString:auswahlZeile];
    22. }
    Alles anzeigen

    Dabei lege ich alle "comonents" in ein Array.
    Nur wie bekomme ich diese Array(bzw. die Elemete darin) in ein NSTableView?
    Geht das irgendwie ?Ich hab schon eins gebaut und die Spalten beschriftet, doch wie kann
    ich diese Ansprechen, damit ich die Elemente aus meinem Array dort einsortieren kann?

    [Blockierte Grafik: http://www.dwienand.de/Expo/kat.png]