다양한 형식일 수 있는 CSV 파일을 로드해야 합니다. 그리고 내 데이터가 시작하는 줄을 찾아야 합니다. 열 이름이 특정 줄 다음에 시작한다는 것을 알고 있습니다. 예를 들어 "[데이터가 여기에서 시작됨]"이라고 가정해 보겠습니다.
이것이 제가하는 것입니다:
ex = Load Text File(
filePath
);
words = Words( ex, "\!n\!r" );
headersLocation = Loc(words, "[Data starts here]");
그런 다음 headersLocation+1을 사용하여 헤더가 시작되는 위치를 지정합니다.
CSV 파일에 빈 줄이 있을 때 문제가 발생합니다.
line1
line2
[Data Starts Here]
Header1, header2
0,0
1,1
이 파일을 단어로 나누면 "[Data Starts Here]" 행이 세 번째 행이 되고 Loca() 함수는 이 경우 3을 제공하지만 실제로는 4번째 행입니다.
따라서 Word 기능으로 파일을 깰 때 - 그 빈 줄이 목록에 포함되지 않습니다.
그리고 데이터가 시작되기 전에 파일에 얼마나 많은 빈 줄이 있는지 모릅니다.
어떻게 해야 하나요?
"\!n" 또는 "\!r"로만 중단하고 for 루프에서 Left() 또는 Right()를 사용하여 나머지 특수 기호를 제거할 수 있지만 너무 잔인하고 최적이 아닌 것처럼 보입니다. 맞는지 잘 모르겠습니다. 이 같은:
For Each( {value, index}, words, words[index] = Right(value, Length(value)-1););전체 스크립트는 다음과 같습니다.
ex = Load Text File(
filePath
);
words = Words( ex, "\!n\!r" );
For Each( {value, index}, words, words[index] = Right(value, Length(value)-1););
headersLocation = Loc(words, "[Data starts here]");그러면 작동하는 것 같습니다. 그러나 이것이 최선이고 올바른 해결책입니까?
JMP의 데이터 가져오기 플랫폼 위치가 필요하십니까? [Data Starts Here] 이전의 데이터가 필요하지 않다면 그냥 놓기만 하면 됩니다.
Names Default To Here(1);
csv = "line1
line2
[Data Starts Here]
Header1, header2
0,0
1,1
";
string_to_search = "[Data Starts Here]";
data_start_idx = Contains(csv, string_to_search);
data_str = Substr(csv, data_start_idx + Length(string_to_search) + 1);
그리고 JMP의 가져오기가 필요한 경우 현재 가지고 있는 문자열과 함께 Char To Blob()을 사용할 수 있습니다.
dt = Open(
Char To Blob(data_str),
Import Settings(
End Of Line(CRLF, CR, LF),
End Of Field(Comma, CSV(0)),
Strip Quotes(1),
Use Apostrophe as Quotation Mark(0),
Use Regional Settings(0),
Scan Whole File(1),
Treat empty columns as numeric(0),
CompressNumericColumns(0),
CompressCharacterColumns(0),
CompressAllowListCheck(0),
Labels(1),
Column Names Start(1),
Data Starts(2),
Lines To Read("All"),
Year Rule("20xx")
)
);