같다 내 프로그램을 이야기하는 방법을 모른다 bussiness, primarly cPanel을 사용합니다. 또한, 나는 코딩하는 법을 배우고있다. 문제는 도메인의 모든 정보 (IP, 도메인 이름, 디스크에있는 avaible 등)가있는 목록 인 cPanel에 의해 생성 된 csv 파일을 구문 분석하는 데 문제가 있다는 것입니다. 지금까지 필자가 성공적으로 파싱 한 모든 파일 (.txt, .csv, .bin 등)은 모두 새로운 줄이 Â endofline으로 구분되어 있습니다. (C에서 \ n, 어떻게 호출되는지는 모르지만 : P),이 특정 파일에서 한 줄의 끝은 다음과 같이 ",,,,"로 구분됩니다.문제, 나는 ",,,,"나는 현재 호스팅을위한 기술 지원에서 일하고 있어요 " n"
domain_name, ip 할당량 ,,,, DOMAIN_NAME, IP, 할당량 ,,,, DOMAIN_NAME, IP, 할당량 ,,,, ...
그리고 나는 내 프로그램을 말하는 방법을 모르는는 ",,,," "\ n"과 같습니다. 지금까지는 파일의 첫 번째 도메인 만 읽을 수 있었지만 반환 된 유일한 레코드입니다. 다음과 같이 코드는 지금까지 있습니다 :
void parsear_archivo(ArrayList* lista)
{
FILE* archivo = abrir_archivo("archivo.csv");
eDominio* aux;
char aux_ip[100];
char aux_nombre_dominio[200];
char aux_user_name[50];
char aux_email[100];
char aux_quota[100];
char aux_server[100];
rewind(archivo);
fscanf(archivo, "%[^,],%[^,],%[^,],%[^\n]\n", aux_nombre_dominio, aux_ip, aux_email,aux_server);
while (!feof(archivo))
{
aux = constructor();
fscanf(archivo, "%[^,],%[^,],%[^,],%[^\n]\n", aux_nombre_dominio, aux_ip, aux_email,aux_server);
if (aux != NULL)
{
strcpy(aux->ip, aux_ip);
strcpy(aux->quota, aux_quota);
strcpy(aux->server, aux_server);
strcpy(aux->email, aux_email);
strcpy(aux->nombre_dominio, aux_nombre_dominio);
}
lista->add(lista, aux);
}
fclose(archivo);
}
코드에 대한 의견의 몇 : 나는 이미 테스트되었습니다, 그래서 그것을 제대로 작동하는지 알고, 메모리에있는 파일을로드하기 위해 ArrayList를 사용하고 있습니다; 함수 생성자()와 abrir_archivo()가 여기에 문제가되지 않습니다는 (I 생성자() 함수가 나는 현재 일 아민있어 특정 구조에 맞게 맞춘, - 물론 문제없이 그들에게 다른 사람 proyects에서 여러 번 사용) . 나는 정규 표현식에 대해 잘 모르는
, 나는 첫 번째 ","이 나타날 때까지 내가 사용하는 사람이 지금 파일에서 읽어 알고 있지만, 그것은 단지 그것에 대해입니다.
도움이 될 것입니다.
나쁜 영어에 대한 당신과 유감을 감사드립니다.
'% [^ \ n] \ n'을'[^,] ,,,, '으로 변경하면 어떻게 될까요? –
모든 전환은 하나 이상의 문자와 일치해야합니다. 형식 문자열의 공백 만 데이터의 선택적 공백을 나타냅니다. 변환 지정이 공백을 건너 뛰지 않으면 ('% c', '% [...]'및 '% n'이 될 수 있습니다. 어쨌든 모든 공백은 건너 뜁니다.) 따라서 CSV 라인의 끝에있는',,,, '을'% [^,], % [^], % [^], % [^,],'(와 같이 변환 할 수 없습니다. 여기서 네 번째로 매치 된 쉼표 뒤에 또 다른'% [^,]'가있을 수도 있고 없을 수도 있습니다. 이 점에 대해서는'scanf()'와'strtok()'도 좋은 생각이 아니라는 것을 알고 있습니다. –