如何在Xcode中明智地获取表主题的详细信息?

时间:2013-08-09 06:15:52

标签: ios objective-c xcode

我做了一个简单的联系人应用程序,可以帮助用户创建一个电子邮件和电话号码的联系人。现在我想从表中添加大约100个联系人。所以我需要能够读取每列的标题并从文本文件中获取相应的数据并将其提供给xcode中的我的函数。这些是我的文件contacts.txt中的联系人表的标题:

Emp_ID   Name   Email   Contact_Number

实现这一目标的不同方法有哪些?

我有一个表格,这些标题保存在一个文本文件contacts.txt中。不,数据库和SQL。

这是我的Contacts.txt文件在xcode中的样子

的示例
\itap1\trowd \taflags1 \trgaph108\trleft-108 \trcbpat3 \tamart320 \tamarb320 \trmarr320 \trbrdrt\brdrs\brdrw20\brdrcf2 \trbrdrl\brdrs\brdrw20\brdrcf2 \trbrdrr\brdrs\brdrw20\brdrcf2 
\clvertalc \clshdrawnil \clwWidth360\clftsWidth3 \clbrdrt\brdrs\brdrw20\brdrcf2 \clbrdrl\brdrs\brdrw20\brdrcf2 \clbrdrb\brdrs\brdrw20\brdrcf2 \clbrdrr\brdrs\brdrw20\brdrcf2 \clpadt60 \clpadl60 \clpadb60 \clpadr60 \gaph\cellx1728
\clvertalc \clshdrawnil \clwWidth1580\clftsWidth3 \clbrdrt\brdrs\brdrw20\brdrcf2 \clbrdrl\brdrs\brdrw20\brdrcf2 \clbrdrb\brdrs\brdrw20\brdrcf2 \clbrdrr\brdrs\brdrw20\brdrcf2 \clpadt60 \clpadl60 \clpadb60 \clpadr60 \gaph\cellx3456
\clvertalc \clshdrawnil \clwWidth3180\clftsWidth3 \clbrdrt\brdrs\brdrw20\brdrcf2 \clbrdrl\brdrs\brdrw20\brdrcf2 \clbrdrb\brdrs\brdrw20\brdrcf2 \clbrdrr\brdrs\brdrw20\brdrcf2 \clpadt60 \clpadl60 \clpadb60 \clpadr60 \gaph\cellx5184
\clvertalc \clshdrawnil \clwWidth6020\clftsWidth3 \clbrdrt\brdrs\brdrw20\brdrcf2 \clbrdrl\brdrs\brdrw20\brdrcf2 \clbrdrb\brdrs\brdrw20\brdrcf2 \clbrdrr\brdrs\brdrw20\brdrcf2 \clpadt60 \clpadl60 \clpadb60 \clpadr60 \gaph\cellx6912
\clvertalc \clshdrawnil \clwWidth3200\clftsWidth3 \clbrdrt\brdrs\brdrw20\brdrcf2 \clbrdrl\brdrs\brdrw20\brdrcf2 \clbrdrb\brdrs\brdrw20\brdrcf2 \clbrdrr\brdrs\brdrw20\brdrcf2 \clpadt60 \clpadl60 \clpadb60 \clpadr60 \gaph\cellx8640
\pard\intbl\itap1\pardeftab720\sl480

\f0\b\fs32 \cf0 #
\b0 \cell 
\pard\intbl\itap1\pardeftab720\sl480

\b \cf0 Emp_ID
\b0 \cell 
\pard\intbl\itap1\pardeftab720\sl480

\b \cf0 Name
\b0 \cell 
\pard\intbl\itap1\pardeftab720\sl480

\b \cf0 Email
\b0 \cell 
\pard\intbl\itap1\pardeftab720\sl480

\b \cf0 Contact_Number
\b0 \cell \row

\itap1\trowd \taflags1 \trgaph108\trleft-108 \trcbpat3 \tamart320 \tamarb320 \trmarr320 \trbrdrl\brdrs\brdrw20\brdrcf2 \trbrdrr\brdrs\brdrw20\brdrcf2 
\clvertalc \clshdrawnil \clwWidth360\clftsWidth3 \clbrdrt\brdrs\brdrw20\brdrcf2 \clbrdrl\brdrs\brdrw20\brdrcf2 \clbrdrb\brdrs\brdrw20\brdrcf2 \clbrdrr\brdrs\brdrw20\brdrcf2 \clpadt60 \clpadl60 \clpadb60 \clpadr60 \gaph\cellx1728
\clvertalc \clshdrawnil \clwWidth1580\clftsWidth3 \clbrdrt\brdrs\brdrw20\brdrcf2 \clbrdrl\brdrs\brdrw20\brdrcf2 \clbrdrb\brdrs\brdrw20\brdrcf2 \clbrdrr\brdrs\brdrw20\brdrcf2 \clpadt60 \clpadl60 \clpadb60 \clpadr60 \gaph\cellx3456
\clvertalc \clshdrawnil \clwWidth3180\clftsWidth3 \clbrdrt\brdrs\brdrw20\brdrcf2 \clbrdrl\brdrs\brdrw20\brdrcf2 \clbrdrb\brdrs\brdrw20\brdrcf2 \clbrdrr\brdrs\brdrw20\brdrcf2 \clpadt60 \clpadl60 \clpadb60 \clpadr60 \gaph\cellx5184
\clvertalc \clshdrawnil \clwWidth6020\clftsWidth3 \clbrdrt\brdrs\brdrw20\brdrcf2 \clbrdrl\brdrs\brdrw20\brdrcf2 \clbrdrb\brdrs\brdrw20\brdrcf2 \clbrdrr\brdrs\brdrw20\brdrcf2 \clpadt60 \clpadl60 \clpadb60 \clpadr60 \gaph\cellx6912
\clvertalc \clshdrawnil \clwWidth3200\clftsWidth3 \clbrdrt\brdrs\brdrw20\brdrcf2 \clbrdrl\brdrs\brdrw20\brdrcf2 \clbrdrb\brdrs\brdrw20\brdrcf2 \clbrdrr\brdrs\brdrw20\brdrcf2 \clpadt60 \clpadl60 \clpadb60 \clpadr60 \gaph\cellx8640
\pard\intbl\itap1\pardeftab720\sl480
\cf0 1\cell 
\pard\intbl\itap1\pardeftab720\sl480
\cf0 Emp1000\cell 
\pard\intbl\itap1\pardeftab720\sl480
\cf0 Name1\cell 
\pard\intbl\itap1\pardeftab720\sl480
\cf0 name1@gmail.com\cell 
\pard\intbl\itap1\pardeftab720\sl480
\cf0 9874563210\cell \row

\itap1\trowd \taflags1 \trgaph108\trleft-108 \trcbpat3 \tamart320 \tamarb320 \trmarr320 \trbrdrl\brdrs\brdrw20\brdrcf2 \trbrdrr\brdrs\brdrw20\brdrcf2 
\clvertalc \clshdrawnil \clwWidth360\clftsWidth3 \clbrdrt\brdrs\brdrw20\brdrcf2 \clbrdrl\brdrs\brdrw20\brdrcf2 \clbrdrb\brdrs\brdrw20\brdrcf2 \clbrdrr\brdrs\brdrw20\brdrcf2 \clpadt60 \clpadl60 \clpadb60 \clpadr60 \gaph\cellx1728
\clvertalc \clshdrawnil \clwWidth1580\clftsWidth3 \clbrdrt\brdrs\brdrw20\brdrcf2 \clbrdrl\brdrs\brdrw20\brdrcf2 \clbrdrb\brdrs\brdrw20\brdrcf2 \clbrdrr\brdrs\brdrw20\brdrcf2 \clpadt60 \clpadl60 \clpadb60 \clpadr60 \gaph\cellx3456
\clvertalc \clshdrawnil \clwWidth3180\clftsWidth3 \clbrdrt\brdrs\brdrw20\brdrcf2 \clbrdrl\brdrs\brdrw20\brdrcf2 \clbrdrb\brdrs\brdrw20\brdrcf2 \clbrdrr\brdrs\brdrw20\brdrcf2 \clpadt60 \clpadl60 \clpadb60 \clpadr60 \gaph\cellx5184
\clvertalc \clshdrawnil \clwWidth6020\clftsWidth3 \clbrdrt\brdrs\brdrw20\brdrcf2 \clbrdrl\brdrs\brdrw20\brdrcf2 \clbrdrb\brdrs\brdrw20\brdrcf2 \clbrdrr\brdrs\brdrw20\brdrcf2 \clpadt60 \clpadl60 \clpadb60 \clpadr60 \gaph\cellx6912
\clvertalc \clshdrawnil \clwWidth3200\clftsWidth3 \clbrdrt\brdrs\brdrw20\brdrcf2 \clbrdrl\brdrs\brdrw20\brdrcf2 \clbrdrb\brdrs\brdrw20\brdrcf2 \clbrdrr\brdrs\brdrw20\brdrcf2 \clpadt60 \clpadl60 \clpadb60 \clpadr60 \gaph\cellx8640
\pard\intbl\itap1\pardeftab720\sl480
\cf0 2\cell 
\pard\intbl\itap1\pardeftab720\sl480
\cf0 Emp1010\cell 
\pard\intbl\itap1\pardeftab720\sl480
\cf0 Name2\cell 
\pard\intbl\itap1\pardeftab720\sl480
\cf0 name2@gmail.com\cell 
\pard\intbl\itap1\pardeftab720\sl480
\cf0 9875463210\cell \row

依此类推,名称为3 - 100

预期输出

阵= {(Emp1000,NAME1,NAME1 @ gmail.com,9874563210),(Emp1010,NAME2 NAME2 @ gmail.com,9875463210)}

这是一个代码,通过它我可以在任意两个字符串之间获取数据

-(NSString*)inString:(NSString*)getStringBetweenString1:(NSString*)sub1 String2:(NSString*)sub2 {
     NSLog(@"%@",start);
    NSRange startRange = [orgstr rangeOfString:start];
    if (startRange.location != NSNotFound) {
        NSRange targetRange;
        targetRange.location = startRange.location + startRange.length;
        targetRange.length = [orgstr length] - targetRange.location;   
        NSRange endRange = [orgstr rangeOfString:end options:0 range:targetRange];
        if (endRange.location != NSNotFound) {
            targetRange.length = endRange.location - targetRange.location;
            return [orgstr substringWithRange:targetRange];
        }
    }
    return nil;
}

2 个答案:

答案 0 :(得分:1)

您可以使用NSScanner解析文件,提取每列并将每条信息保存到新的联系人对象中。您可以使用while循环迭代每一行,并在扫描程序完成当前行的所有列时创建新对象。

有关使用NSScanner

的指导,请参阅this doc

答案 1 :(得分:0)

我能够通过修改上面的函数来解决问题,这也将返回一个索引。

-(NSArray*)inString:(NSString*)main getStringBetweenString1:(NSString*)sub1 string2:(NSString*)sub2 fromIndex:(long int)indexrange
{
    NSMutableArray *returnArray=[[NSMutableArray alloc]initWithCapacity:2];
    [returnArray insertObject:@"" atIndex:0];
    [returnArray insertObject:[NSNumber numberWithLong:NSNotFound] atIndex:1];
    NSString *returnString=@"";
    long int start,end;
    start=[self inString:main getIndexOfSubString:sub1 fromIndex:indexrange];
    if(start==NSNotFound)
        return returnArray;
    end=[self inString:main getIndexOfSubString:sub2 fromIndex:start];
     NSLog(@"Start:%ld end:%ld",start,end);
    if(end==NSNotFound)
        return returnArray;

    for(long int i=start+[sub1 length];i<end;i++)
    {
        returnString=[returnString stringByAppendingString:[NSString stringWithFormat:@"%c",[main characterAtIndex:i]]];
    }
    NSLog(@"%@",returnString);
    [returnArray insertObject:returnString atIndex:0];
    [returnArray insertObject:[NSNumber numberWithLong:end] atIndex:1];

    return returnArray;
}


-(long int)inString:(NSString*)s getIndexOfSubString:(NSString*)s1 fromIndex:(long int)fromIndex
{
    for(int i=fromIndex;i<[s length];i++)
    {
        if([s characterAtIndex:i]==[s1 characterAtIndex:0])
        {
            int j=i+1,k=1;
            for(k=1;k<[s1 length];k++,j++)
            {
                if([s characterAtIndex:j]!=[s1 characterAtIndex:k])
                    break;
            }
            if(k==[s1 length])
                return i;
        }
    }
    return NSNotFound;
}

-(void)getContactsFromFile:(NSString*)fileName
{
    NSString* path = [[NSBundle mainBundle] pathForResource:fileName
                                                     ofType:@"txt"];
    NSString* content = [NSString stringWithContentsOfFile:path
                                                  encoding:NSUTF8StringEncoding error:NULL];


 for(long int j=3227;;) //3227 is index at which it should start
    {
        NSArray *cellobj=[self inString:content getStringBetweenString1:@"\\cf0" string2:@"\\cell" fromIndex:j];
        j=[[cellobj objectAtIndex:1] integerValue];
           if(j==NSNotFound)
            break;
         NSLog(@"String:%@",[cellobj objectAtIndex:0]); // prints all details of table topics individually

        NSString *test=[cellobj objectAtIndex:0];
}

//Do something with test
}