CSV Parser relativer Dateipfad funktioniert nicht

P

pumpspass

Aktives Mitglied
Thread Starter
Dabei seit
20.12.2010
Beiträge
432
Reaktionspunkte
24
Hallo,

ich möchte gerne eine CSV-Datei in ein NSMutableArray wandeln.

Dazu benutze ich cCSVParse.

Benutze ich den vollständigen Dateipfad ("/Users/user/Documents/ProjektXY/csvtest.csv") funktioniert es problemlos. Verwende ich jedoch:

testcsv.csv
/testcsv.csv
./testcsv.csv


funktionert es nicht.

Hatt jemand eine Idee weshalb?

hier der code

Code:
    CSVParser *parser = [CSVParser new];
    [parser openFile: @"/Users/user/Documents/projectXY/testcsv.csv"];
    NSMutableArray *csvContent = [parser parseFile];
    int c;
    for (c = 0; c < [csvContent count]; c++) {
        //NSLog(@"content of line %d: %@", c, [[csvContent objectAtIndex: c]objectAtIndex:0]);
        //NSLog(@"content of line %d: %@", c, [[csvContent objectAtIndex: c]objectAtIndex:1]);
        [namenListe addObject:[[csvContent objectAtIndex: c]objectAtIndex:0]];
        [vorNamenListe addObject:[[csvContent objectAtIndex: c]objectAtIndex:1]];
    }
    [parser closeFile];

ich denke es liegt an der openfile Funktion des Prassers:

Code:
-(BOOL)openFile:(NSString*)fileName {
	fileHandle = open([fileName UTF8String], O_RDONLY);
    return (fileHandle > 0);
}
 
Zuletzt bearbeitet:
Natürlich. Selbst wenn die relativen Pfade funktionieren (da bin ich mir gerade nicht sicher), musst Du erstmal prüfen, was in Deiner OS X App der aktuelle Pfad ist. Es ist aller Wahrscheinlichkeit NICHT /Users/user/Documents/ProjektXY/, sondern eher /Users/user/Documents/ProjektXY/Contents/MacOSX

Wenn Du eine Datei in den Ressourcen Deiner App suchst solltest Du IMMER die Funktionen von NSBundle verwenden.

Alex
 
Also der /Users/user/Documents/ProjektXY/testcsv.csv Pfad funktioniert ja. Nur wenn ich anstatt dessen nur @"testcsv.csv" eingebe funktioniert es nicht. Lade ich aber ein Bild in ein UIImage mit

UIImage *bla = [UIImage imageNamed:mad:"bla.tiff"];

funktioniert das auch.
 
Du hast Alex falsch verstanden.

Dass der volle Pfad beim Laden der Datei funktioniert ist solange richtig, wie der User "user" heißt und das Application-Bundle in /User/user/Documents/ProjektsXY liegt. Das wird er aber nur bei Dir während Du entwickelst. Dateien liegen im Application-Bundle in einer bestimmten Position, die Du über Funktionalitäten von NSBundle errreichen kannst.

Dass Dein UIImage-Beispiel funktioniert, liegt daran, dass imageNamed keine Pfandangabe akzeptiert sondern nur den Namen der Datei. Es schaut dann in den Ressourcen des Bundles nach, benutzt also NSBundle.

Gruß Carsten
 
Das ist ja mein Problem, dass ich diese Pfadabhängigkeit nicht möchte. Ah ok, ich lese mich dann mal durch NSBundle durch.

Danke ;)

So hier die Lösung falls noch jemand sucht:

NSString *dateiPfad = [[NSBundle mainBundle] pathForResource:mad:"testcsv" ofType:mad:"csv"];
 
Zuletzt bearbeitet:
Aus der Dokumentation von UIImage imageNamed: "the method looks for an image with the specified name in the application’s main bundle"

Das macht "open" nicht. "open" hat insbesondere überhaupt keine Ahnung, was ein Bundle ist. (Ausserdem könntest Du +[NSFileHandle fileHandleForReadingAtPath:] verwenden)

Alex
 
Zurück
Oben Unten