5

私はコーディングが初めてなので、これが簡単な質問のように思えたらすみません。

地図上に座標をプロットしようとしています。

CSV ファイルを読み取り、その情報を 2 つの個別の配列に渡したいと考えています。

最初の配列は NSArray *towerInfo (緯度、経度、塔のタイトルを含む) になります。

2 番目の NSArray *region (タワーのタイトルとリージョンを含む) は、最初の配列と同じカウント インデックスを持ちます。

本質的に、私はそうする必要があると信じています。

1)ファイルを文字列に読み取ります.....

2) 文字列を /n/r ごとに区切られた一時的な配列に分割します......

3) temp アレイをループして、毎回、この情報を 2 つのメイン ストレージ アレイに追加する前に、タワーとリージョン オブジェクトを作成します。

これは正しいプロセスですか?もしそうなら、私はこれを正しくするのに本当に苦労しているので、サンプルコードを投稿できる人がいます.

事前にすべてに感謝します。

クリス。

これを編集して、コードの例を示しました。という警告を受け取っているという問題があります

1)「「dataStr」のローカル宣言はインスタンス変数を隠します。2)「「配列」のローカル宣言はインスタンス変数を隠します。

これらの意味は理解していると思いますが、それを回避する方法がわかりません。プログラムはコンパイルおよび実行されますが、ログには「配列が null です」と表示されます。

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

@synthesize dataStr;
@synthesize array;

-(IBAction)convert {
//calls the following program when the onscreen 'convert' button is pressed.

    NSString *dataStr = [NSString stringWithContentsOfFile:@"Towers.csv" encoding:NSUTF8StringEncoding error:nil];
    //specifies the csv file to read - stored in project root directory - and encodes specifies that the format of the file is NSUTF8. Choses not to return an error message if the reading fails

    NSArray *array = [dataStr componentsSeparatedByString: @","];
    //splits the string into an array by identifying data separators.

    NSLog(@"array: %@", array);
    //prints the array to screen

}

追加のヘルプをいただければ幸いです。これまでの回答に感謝します。

4

3 に答える 3

7
NSString* fileContents = [NSString stringWithContentsOfURL:filename ...];
NSArray* rows = [fileContents componentsSeparatedByString:@"\n"];
for (...
    NSString* row = [rows objectAtIndex:n];
    NSArray* columns = [row componentsSeparatedByString:@","];
...

空白を削除するために、いくつかの「stringTrimmingCharactersInSet」呼び出しをスローすることをお勧めします。

于 2012-04-18T17:12:52.997 に答える
1

あなたの警告について:

実装でプロパティを合成する前にインターフェイス ファイルでプロパティを宣言する必要があるため、コードはエラー (警告ではありません) を生成します。@synthesizeがプロパティのアクセサ メソッドを生成することを覚えているでしょう。また、ディレクティブを使用する前に、インターフェイスでもディレクティブ@synthesizeを使用する必要があります。@property次に例を示します。

@interface MyObject : NSObject {
    NSString *myString;
}
@property (assign) NSString *myString;
@end

@implementation MyObject
@synthesize myString;
  // funky code here
@end

プロパティ宣言の後に型が続くことに注意してください (この場合は割り当て、これがデフォルトです)。これについては、Stephen G. Kochans の著書「Programming in Objective-C 2.0 」に優れた説明があります。


しかし、議論のために、@interfaceここで正しいファイルを省略したと仮定します。最初に でプロパティを宣言し@interface、次に同じ変数名を使用してメソッドで別のプロパティを宣言すると、メソッド変数がインスタンス変数よりも優先されます。

コードでは、次のように変数名の宣言を省略するだけで十分です。

dataStr = [NSString stringWithContentsOfFile:@"Towers.csv" encoding:NSUTF8StringEncoding error:nil];    
array = [dataStr componentsSeparatedByString: @","];
于 2012-05-08T09:03:24.180 に答える
0

あなたの質問の核心は、「解析されたデータをどうするか」ではなく、「CSVファイルを解析する方法」であると思います。その場合は、CHCSVParserライブラリを確認してください。以前にプロジェクトで使用したことがあり、非常に信頼できることがわかりました。任意の文字列またはファイルパスを解析して、行/列の NSArray にすることができます。その後、データをどうするかはあなた次第です。

于 2012-04-18T17:45:47.893 に答える