检索先前在设备上创建的.CSV文件会产生奇怪的格式

时间:2014-04-02 13:08:15

标签: objective-c csv parse-platform

我确信这是一个简单问题的简单答案,但我似乎无法弄明白。

非常感谢任何帮助。

我已经下载了包含来自ACT的联系信息的.csv!数据库。

像这样...

PFQuery *jobsQuery = [PFQuery queryWithClassName:@"Jobs"];
    [jobsQuery getObjectInBackgroundWithId:@"eWuJ6toJbO" block:^(PFObject *object, NSError *error) {

        if (!error) {
            PFFile *csvFile = [object objectForKey:@"Contact"];
            [csvFile getDataInBackgroundWithBlock:^(NSData *data, NSError *error) {

                if (!error) {

                    NSString *storePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:@"jobsfile.csv"];
                    [data writeToFile:storePath options:NSDataWritingAtomic error:&error];

                    uncompletedJobs = [[[NSString stringWithContentsOfFile:storePath encoding:NSUTF8StringEncoding error:NULL] componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]mutableCopy];

                    [self.table reloadData];
                    [self.refreshControl endRefreshing];

                    NSLog(@"Found on the database %@",uncompletedJobs);


                }else{

                    NSLog(@"Error: %@ %@", error, [error userInfo]);
                   [self.refreshControl endRefreshing];
                }
            }];
        }else{
            NSLog(@"Error: %@ %@", error, [error userInfo]);
            [self.refreshControl endRefreshing];
        }
    }];
}

下载后会添加新的联系信息。

 NSMutableString *tmpString = [NSMutableString stringWithFormat:@"%@,%@,%@,%@",[custArray objectAtIndex:0],[custArray objectAtIndex:1],[custArray objectAtIndex:2],[custArray objectAtIndex:3]]; //creating a string from the array.

 [uncompletedJobs addObject:tmpString]; //adding the new string to uncompletedJobs Array.

然后将其上传到服务器

-(void)createCSV {


    NSMutableString *csv = [NSMutableString stringWithFormat:@"%@",uncompletedJobs];

    NSArray *paths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory,
                                                     NSUserDomainMask, YES); //Saving to documnets folder.
    NSString *path = [paths objectAtIndex:0];

    NSString *filePath = [path stringByAppendingPathComponent:@"newContacts.csv"]; //Save Name.

    NSError *error;

    BOOL res = [csv writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:&error]; //Has it saved successfully? BOOL.

    if (!res) {

        NSLog(@"Error %@ while writing to file %@", [error localizedDescription], filePath );
    }else{

        NSLog(@"No error creating save file! uploading...");

        [self upload];
    }
}

- (NSString *)getPath {

    NSString *paths = [NSSearchPathForDirectoriesInDomains
                   (NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

    return [paths stringByAppendingPathComponent:@"newContacts.csv"];
}

-(void)upload {

    NSString *SavedDataPath = [self getPath];

    NSString *path = SavedDataPath;

    NSData *data = [NSData dataWithContentsOfFile:path];

    PFFile *file = [PFFile fileWithName:@"newContacts.csv" data:data];

    NSLog(@"raw data we are uploading = \"%@\"", data);

    PFQuery *jobsQuery = [PFQuery queryWithClassName:@"Jobs"];

    [jobsQuery getObjectInBackgroundWithId:@"eWuJ6toJbO" block:^(PFObject *object, NSError *error) {

        object[@"Contact"] = file;

        [object saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
            if (error) {

               UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error Sending!"
                                                            message:[NSString stringWithFormat:@"Error Report: %@ %@",error, error.userInfo] delegate:self cancelButtonTitle:@"I've taken note" otherButtonTitles:nil];
                [alert show];

            }else{

                NSLog(@"Upload Complete, Hoorah!");

                UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Upload Complete!"
                                                            message:@"You've successfully uploaded a new customer to the database." delegate:self cancelButtonTitle:@"Thanks" otherButtonTitles:nil];
                [alert show];


                customerDropdown.hidden = YES;

            }
        }];
    }];
}

最初当数据被下载并放入uncompletedJobs时,输出看起来像这样......

( 
"Company,Contact,Address 1,Address 2,Address 3,City,County,Postcode,",
"Company,Contact,Address 1,Address 2,Address 3,City,County,Postcode,",
"New Data,New Data,New Data,New Data,New Data,New Data,New Data,New Data,",

)

然后在步骤1(包含添加到.csv的新数据)再次从服务器下载数据时,格式化如下所示。如果随后保存,上传和重新下载更多数据,则会逐渐变得更糟。

(
    "(",
        "    \"Company,Contact,Address 1,Address 2,Address 3,City,County,Postcode\",",
        "    \"Company,Contact,Address 1,Address 2,Address 3,City,County,Postcode\",",
        "    \"New Data,New Data,New Data,New Data,New Data,New Data,New Data,New Data\",",
    ")"
)

)
   "(",
        "    \"(\",",
        "    \"    \\\"Company,Contact,Address 1,Address 2,Address 3,City,County,Postcode\\\",\",",
        "    \"    \\\"Company,Contact,Address 1,Address 2,Address 3,City,County,Postcode\\\",\",",
        "    \"New Data,New Data,New Data,New Data,New Data,New Data,New Data,New Data\",",
        "    \")\",",
    ")"
)

数据看起来格式正确,但是当它返回并被解析时出现了错误。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

没有测试就很难说,但我想我有答案。

NSMutableString *csv = [NSMutableString stringWithFormat:@"%@",uncompletedJobs];

uncompletedJobs是一个数组,所以你的字符串(csv)就像:

"(     \" object0 \&#34 ;,     \" object1 \&#34 ;,     \" Object2的\"     )"

如果你不解析它并将它添加到你的.csv,它会变得最糟糕,最糟糕......

因此,您需要循环遍历数组并添加NSMutableString的单个字符串。