2010-01-12 6 views
0

, конечно, есть более короткий способ сделать это?есть более короткий способ сделать это?

NSString *filePathA = [[NSBundle mainBundle] pathForResource:@"A" ofType:@"txt"]; 
NSString *myTextA= [NSString stringWithContentsOfFile:filePathA encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresA = [myTextA componentsSeparatedByString:@"-"]; 




NSString *filePathB = [[NSBundle mainBundle] pathForResource:@"B" ofType:@"txt"]; 
NSString *myTextB= [NSString stringWithContentsOfFile:filePathB encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresB = [myTextB componentsSeparatedByString:@"-"]; 

NSString *filePathC = [[NSBundle mainBundle] pathForResource:@"C" ofType:@"txt"]; 
NSString *myTextC= [NSString stringWithContentsOfFile:filePathC encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresC = [myTextC componentsSeparatedByString:@"-"]; 

NSString *filePathD = [[NSBundle mainBundle] pathForResource:@"D" ofType:@"txt"]; 
NSString *myTextD= [NSString stringWithContentsOfFile:filePathD encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresD = [myTextD componentsSeparatedByString:@"-"]; 

NSString *filePathE = [[NSBundle mainBundle] pathForResource:@"E" ofType:@"txt"]; 
NSString *myTextE= [NSString stringWithContentsOfFile:filePathE encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresE = [myTextE componentsSeparatedByString:@"-"]; 

NSString *filePathF = [[NSBundle mainBundle] pathForResource:@"F" ofType:@"txt"]; 
NSString *myTextF= [NSString stringWithContentsOfFile:filePathF encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresF = [myTextF componentsSeparatedByString:@"-"]; 

NSString *filePathG = [[NSBundle mainBundle] pathForResource:@"G" ofType:@"txt"]; 
NSString *myTextG= [NSString stringWithContentsOfFile:filePathG encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresG = [myTextG componentsSeparatedByString:@"-"]; 

NSString *filePathH = [[NSBundle mainBundle] pathForResource:@"H" ofType:@"txt"]; 
NSString *myTextH= [NSString stringWithContentsOfFile:filePathH encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresH = [myTextH componentsSeparatedByString:@"-"]; 

NSString *filePathI = [[NSBundle mainBundle] pathForResource:@"I" ofType:@"txt"]; 
NSString *myTextI= [NSString stringWithContentsOfFile:filePathI encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresI = [myTextI componentsSeparatedByString:@"-"]; 

NSString *filePathJ = [[NSBundle mainBundle] pathForResource:@"J" ofType:@"txt"]; 
NSString *myTextJ= [NSString stringWithContentsOfFile:filePathJ encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresJ = [myTextJ componentsSeparatedByString:@"-"]; 

NSString *filePathK = [[NSBundle mainBundle] pathForResource:@"K" ofType:@"txt"]; 
NSString *myTextK= [NSString stringWithContentsOfFile:filePathK encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresK = [myTextK componentsSeparatedByString:@"-"]; 

NSString *filePathL = [[NSBundle mainBundle] pathForResource:@"L" ofType:@"txt"]; 
NSString *myTextL= [NSString stringWithContentsOfFile:filePathL encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresL = [myTextL componentsSeparatedByString:@"-"]; 

NSString *filePathM = [[NSBundle mainBundle] pathForResource:@"M" ofType:@"txt"]; 
NSString *myTextM= [NSString stringWithContentsOfFile:filePathM encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresM = [myTextM componentsSeparatedByString:@"-"]; 

NSString *filePathN = [[NSBundle mainBundle] pathForResource:@"N" ofType:@"txt"]; 
NSString *myTextN = [NSString stringWithContentsOfFile:filePathN encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresN = [myTextN componentsSeparatedByString:@"-"]; 

NSString *filePathO = [[NSBundle mainBundle] pathForResource:@"O" ofType:@"txt"]; 
NSString *myTextO= [NSString stringWithContentsOfFile:filePathO encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresO = [myTextO componentsSeparatedByString:@"-"]; 

NSString *filePathP = [[NSBundle mainBundle] pathForResource:@"P" ofType:@"txt"]; 
NSString *myTextP= [NSString stringWithContentsOfFile:filePathP encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresP = [myTextP componentsSeparatedByString:@"-"]; 

NSString *filePathQ = [[NSBundle mainBundle] pathForResource:@"Q" ofType:@"txt"]; 
NSString *myTextQ= [NSString stringWithContentsOfFile:filePathQ encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresQ = [myTextQ componentsSeparatedByString:@"-"]; 

NSString *filePathR = [[NSBundle mainBundle] pathForResource:@"R" ofType:@"txt"]; 
NSString *myTextR= [NSString stringWithContentsOfFile:filePathR encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresR = [myTextR componentsSeparatedByString:@"-"]; 

NSString *filePathS = [[NSBundle mainBundle] pathForResource:@"S" ofType:@"txt"]; 
NSString *myTextS= [NSString stringWithContentsOfFile:filePathS encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresS = [myTextS componentsSeparatedByString:@"-"]; 

NSString *filePathT = [[NSBundle mainBundle] pathForResource:@"T" ofType:@"txt"]; 
NSString *myTextT= [NSString stringWithContentsOfFile:filePathT encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresT = [myTextT componentsSeparatedByString:@"-"]; 

NSString *filePathU = [[NSBundle mainBundle] pathForResource:@"U" ofType:@"txt"]; 
NSString *myTextU= [NSString stringWithContentsOfFile:filePathU encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresU = [myTextU componentsSeparatedByString:@"-"]; 

NSString *filePathV = [[NSBundle mainBundle] pathForResource:@"V" ofType:@"txt"]; 
NSString *myTextV= [NSString stringWithContentsOfFile:filePathV encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresV = [myTextV componentsSeparatedByString:@"-"]; 

NSString *filePathW = [[NSBundle mainBundle] pathForResource:@"W" ofType:@"txt"]; 
NSString *myTextW= [NSString stringWithContentsOfFile:filePathW encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresW = [myTextW componentsSeparatedByString:@"-"]; 
//none with "X" 
//NSString *filePathX = [[NSBundle mainBundle] pathForResource:@"X" ofType:@"txt"]; 
//NSString *myTextX= [NSString stringWithContentsOfFile:filePathX encoding:NSUTF8StringEncoding error:nil]; 
//NSArray *arrayStructuresX = [myTextX componentsSeparatedByString:@"-"]; 

NSString *filePathY = [[NSBundle mainBundle] pathForResource:@"Y" ofType:@"txt"]; 
NSString *myTextY= [NSString stringWithContentsOfFile:filePathY encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresY = [myTextY componentsSeparatedByString:@"-"]; 

NSString *filePathZ = [[NSBundle mainBundle] pathForResource:@"Z" ofType:@"txt"]; 
NSString *myTextZ= [NSString stringWithContentsOfFile:filePathZ encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresZ = [myTextZ componentsSeparatedByString:@"-"]; 

любые идеи? Мне предложили преломлять его, но я понятия не имею, как это сделать !!

благодаря

Сэм

UPDATE:

[повторяющийся код, как это на самом деле плохо? im только начинается? будет ли это считаться плохой практикой? или «не надо» в мире программирования? ]

+1

Возможно использование петли и массива? –

+1

Можете ли вы сделать свой пример короче? ;-) –

+0

пример дает вам то, что я хочу сделать это 25/26 раз –

ответ

2

Я бы предложил создать массив и словарь: один для хранения всех ваших файловых путей и один для хранения массивов.

Создайте массив filepaths со всеми именами файлов, с которых вы хотите загрузить данные.

Словарь массива должен первоначально быть пустым NSMutableDictionary с емкостью 25 (буквы в алфавите -1 (не используя x)).

Пройдите через массив массивов файлов и выполните то же самое, что вы делали для каждой итерации, кроме как в конце каждой итерации, вы должны вызвать addObject: forKey: словарь массивов.

NSMutableDictionary *structures = [ [ NSMutableDictionary alloc ] initWithCapacity:25 ]; 
NSArray *filePaths = [ [NSArray alloc] initWithObjects: @"A", @"B", @"C", @"D", @"E", @"F", @"G", @"H", @"I", @"J", @"K", @"L", @"M", @"N", @"O", @"P", @"Q", @"R", @"S", @"T", @"U", @"V", @"W", /* no X */@"Y", @"Z" ]; // you could also just create a standalone text file and load it from there, i know this is ridiculous! 

for(NSString *path in filePaths) { 
    NSString *filePath = [[NSBundle mainBundle] pathForResource:path ofType:@"txt"]; 
    NSString *myText = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil]; 
    [ structures addObject: [myText componentsSeparatedByString:@"-"] forKey: path ]; 
} 

Теперь цикл по словарю ....

for(NSString *filePath in structures) { 
    NSArray *structure = [ structure objectForKey: filePath ]; 
    //... 
} 
+0

Можете ли вы отредактировать это, чтобы быть именно тем, что будет работать? Благодаря! –

+0

Это то, что сработало бы. –

-1

Если вы действительно хотите, чтобы все эти локальные переменные, я думаю, это выглядит как прекрасная возможность использовать макрос (если я осмелюсь сказать)

#define MAKEARRAY(_letter) \ 
    NSString *filePath ## _letter = [[NSBundle mainBundle] pathForResource:@ #_letter ofType:@"txt"]; \ 
    NSString *myText ## _letter = [NSString stringWithContentsOfFile:filePath ## _letter encoding:NSUTF8StringEncoding error:nil]; \ 
    NSArray *arrayStructures ## _letter = [myText ## _letter componentsSeparatedByString:@"-"] 

MAKEARRAY(A); 
MAKEARRAY(B); 
MAKEARRAY(C); 
: 
: 
MAKEARRAY(W); 
//MAKEARRAY(X); none with X 
MAKEARRAY(Y); 
MAKEARRAY(Z); 
+0

почему вы говорите «осмелюсь сказать?» макросы плохо или что-то в этом роде? –

+0

Я не думаю, что они плохо используются мудро. Но вы можете видеть, что есть люди, которые так думают. (хотя я пытался поставить некоторые требования для этого использования - «действительно хочу все эти локальные переменные»). Я оставлю ответ (а не его удаление) здесь, как «другой вариант». – epatel

0

Пахнет отличной возможностью написать цикл.

Вы можете увидеть, что ваш код повторяется, так что вам нужно сделать, это извлечь подобный компонент из каждого элемента в петлю, извлекать различные compoenent как входа или выходных массива, а вы сделано.

Смежные вопросы