Necesito cargar un archivo CSV que puede estar en varios formatos diferentes. Y necesito encontrar en qué línea comienzan mis datos. Sé que los nombres de las columnas comienzan después de cierta línea, digamos "[Los datos comienzan aquí]".
Esto es lo que hago:
ex = Load Text File(
filePath
);
words = Words( ex, "\!n\!r" );
headersLocation = Loc(words, "[Data starts here]");
y luego uso headersLocation+1 para especificar dónde comienzan mis encabezados.
El problema ocurre cuando tengo una línea vacía en mi archivo CSV:
line1
line2
[Data Starts Here]
Header1, header2
0,0
1,1
Cuando divido este archivo en palabras, la línea "[Data Starts Here]" será la tercera, la función Loca() me dará 3 en este caso, mientras que en realidad es la cuarta línea.
Entonces, al dividir el archivo por la función Words, esa línea vacía simplemente no aparece en la lista.
Y no sé cuántas líneas vacías puedo tener en el archivo antes de que comiencen los datos.
¿Cómo lo hago?
Puedo romper solo con "\!n" o "\!r", y luego usar Left() o Right() en un bucle for para eliminar el símbolo especial restante, pero parece demasiado fuerza bruta y no muy óptimo y No estoy seguro de que sea correcto. Algo como esto:
For Each( {value, index}, words, words[index] = Right(value, Length(value)-1););Todo el guión es:
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]");Entonces parece estar funcionando. Pero, ¿es esta la mejor e incluso una solución correcta?
¿Necesita la ubicación de la plataforma de importación de datos de JMP? Si no necesita los datos antes de [Los datos comienzan aquí], simplemente puede dejarlos
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);
Y si necesita la importación de JMP, puede usar Char To Blob() con la cadena que ahora tiene:
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")
)
);