0

私は、姓、名、電子メールを3つの別々の列に含むcsvファイルをアップロードできるアプリを構築しています。ユーザー インターフェイスには、3 つのテキスト フィールドと 1 つのボタンがあります。ユーザーが名、姓、または電子メールを入力して検索ボタンをクリックすると、ドキュメント全体が検索され、ファイル内にレコードが見つかったことを示すアラートが表示される必要があります。これは私が使用している関数ですが、最初の行と最初の列のみを読み取ります。助けてください

- (void) SearchStudent

{

    NSArray *DocumentPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);



    NSString *DocumentDirectory = [DocumentPath objectAtIndex:0];



    NSString *FullPath = [DocumentDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"example.csv"]];



    NSString * pstrCSVFile= [NSString stringWithContentsOfFile:FullPath encoding:NSASCIIStringEncoding error:NULL];



    NSArray * paRowsOfCSVFile= [pstrCSVFile componentsSeparatedByString:@"\n"];

    NSArray *paColumnsOfRow;

    NSString *pstrFirstColumn;



    for(NSString * pstrRow in paRowsOfCSVFile)

    {

        paColumnsOfRow= [pstrRow componentsSeparatedByString:@","];

        pstrFirstColumn= [paColumnsOfRow objectAtIndex:0];

        if([pstrFirstColumn localizedCaseInsensitiveCompare:GWIDText.text] == NSOrderedSame)

        {

            UIAlertView *alertingFileName = [[UIAlertView alloc]initWithTitle:@"Error" message:@"Found" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];

            [alertingFileName show];

            break;

        }

        else

        {

            UIAlertView *alertingFileName1 = [[UIAlertView alloc]initWithTitle:@"Error" message:@"Not Found" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];

            [alertingFileName1 show];

            break;

        }

    }


}
4

2 に答える 2

0

ヒントのカップル:

  1. 1つの列のみをチェックしています。

    if([pstrFirstColumn localizedCaseInsensitiveCompare:GWIDText.text] == NSOrderedSame)
    

他の2つの列についても同じようにします。次に、1つの列のみをチェックするという最初の問題を解決します。

  1. ラインターミネータが正しくないようです。csvファイルが作成されたプラットフォームに応じて、ラインターミネータが異なる場合があります。たとえば、notepad ++のようなテキストエディタを使用して、隠しコードを表示して行末記号を見つけることをお勧めします。次に、ターミネータを使用して行を分割します。複数の行を取得していることを確認してください(rows変数を出力するだけです)。
于 2012-09-27T18:33:14.903 に答える
0

名が一致しない場合、elseステートメントがforループから抜け出しているようです。それを削除し、一致が見つかった場合に追跡する変数を追加することをお勧めします。名前が一致する場合のみ設定してください。forループの後、変数をチェックして、一致するかどうかを確認します。そうでない場合は、「Not Found」の UIAlertView を表示します。

于 2012-09-25T19:34:16.130 に答える