0

I have done a simple Contact app which helps user to create a contact with email and phone number. Now I am trying to add about 100 contacts from a table. So I need to be able to read the title of each column and get the data accordingly from the text file and feed it to my function in the xcode. These are the heading of my contacts table in my file, contacts.txt:

Emp_ID   Name   Email   Contact_Number

What are the different ways to achieve this?

I have a table with these headings saved in a text file, contacts.txt. No, database and SQL.

This is a sample of how my Contacts.txt file looks like in 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

And so on the list continues for name 3 - 100

Expected output

Array={(Emp1000,Name1,name1@gmail.com,9874563210),(Emp1010,Name2,name2@gmail.com,9875463210)}

This is a code which through which I can get data between any two strings

-(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;
}
4

2 回答 2

1

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

有关使用. _NSScanner

于 2013-08-09T06:58:00.327 回答
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
}
于 2013-08-12T05:40:23.900 回答