2014-03-31 3 views
0

아래의 .CSV 파일은 이미 값 목록이 아닌 멋진 형식으로되어 있습니다. .CSV 개별 값으로 읽기

enter image description here

어떻게 수?

나는 정상에서이를 검색 할 방법을 알고를 예를 들어 ...이 목록에서 5 & 6의 '시간'개별 값을 읽고 반환 할 수있을 것입니다. 이와 같은 이상한 레이아웃이 하나에서 단하지 나열되어 csv 파일. 어떤 아이디어?

감사

+0

하지 수 있지만이 당신을 도울 https://github.com/davedelong/CHCSVParser 사람이 읽을 수있는, 또는 기계의 관점에서 멋진 –

+1

읽을 수 있습니까? 실제 CSV/구문 분석 된 콘텐츠 로그를 표시합니다. 얼마나 멀리있어? 그것은 무엇을 잘못합니까? – Wain

+0

이 형식은 사람이 읽을 수 있어야하지만 보고서를 생성 할 때 기계에서도 읽을 수 있어야합니다. 지금까지 나는 아이디어 만 가지고있다. 여기에는 아마도 배열 인덱스에서 값을 가져 오는 것이 포함됩니다. 그러나 더 많은 시간이 있으면 레이아웃 구조가 길이를 변경할 수 있습니다. 그래서 나는 최선의 방법으로 확신 할 수 없다. – Ryan

답변

0

만약 같은 "시간 4"및 "5의 시간과 열 제목 (6 ")가 일관성이 있으면 각 행을 쉼표로 구분하고 열 제목의 색인을 찾은 다음 다음 행에서 동일한 열을 가져올 수 있습니다. 테스트하지는 않았지만 정상적으로 작동해야한다고 생각합니다. 파일을 가정하면 문자열로 읽어 : CSV 구문 분석을 수행

NSArray *componentsByLine = [myFile componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]; 

int firstIndex = 0; 
int secondIndex = 0; 
BOOL found = NO; 

for(firstIndex = 0; firstIndex < componentsByLine.count; firstIndex++) 
{ 
    NSArray *componentsByComma = [[componentsByLine objectAtIndex:firstIndex] componentsSeparatedByString:@","]; 

    for(secondIndex = 0; secondIndex < componentsByComma.count; secondIndex++) 
    { 
     if([[componentsByComma objectAtIndex:secondIndex] isEqualToString:@"Time of 5 & 6"]) 
     { 
      found = YES; 
      break; 
     } 

    } 
    if(found) 
     break; 
} 

float requestedTime = [[[[componentsByLine objectAtIndex:firstIndex+1] componentsSeparatedByString:@","] objectAtIndex:secondIndex] floatValue];