다음 형식의 학생 기록이있는 파일이 있습니다.파일에서 데이터를 꺼내서 C++로 문자열에 저장하십시오.
Umar|Ejaz|12345|[email protected]
Majid|Hussain|12345|[email protected]
Ali|Akbar|12345|[email protected]
Mahtab|Maqsood|12345|[email protected]
Juanid|Asghar|12345|[email protected]
데이터는 다음과 같은 포맷에 따라 저장되었습니다
가firstName|lastName|contactNumber|email
라인 (기록)의 갯수가 제 프로그램의 한계 (100)를 초과 할 수 있으며, I는 다음 정의한 문자열 변수. 내가 해당 문자열에 데이터를 입력하려면, | ''
#define MAX_SIZE 100
// other code
string firstName[MAX_SIZE];
string lastName[MAX_SIZE];
string contactNumber[MAX_SIZE];
string email[MAX_SIZE];
지금, 나는 파일에서 데이터를 끌어 원하고, 구분 기호를 사용하여. 문자열 변수에 데이터를 다시 넣으려면 다음 전략을 사용하고 있습니다.
ifstream readFromFile;
readFromFile.open("output.txt");
// other code
int x = 0;
string temp;
while(getline(readFromFile, temp)) {
int charPosition = 0;
while(temp[charPosition] != '|') {
firstName[x] += temp[charPosition];
charPosition++;
}
while(temp[charPosition] != '|') {
lastName[x] += temp[charPosition];
charPosition++;
}
while(temp[charPosition] != '|') {
contactNumber[x] += temp[charPosition];
charPosition++;
}
while(temp[charPosition] != endl) {
email[x] += temp[charPosition];
charPosition++;
}
x++;
}
각 문자열 끝에 null 문자 '\ 0'을 첨부해야합니까? 그리고 첨부하지 않으면 실제로 프로그램에서 문자열 변수를 구현할 때 문제가 발생합니다. 저는 C++에 익숙하지 않습니다.이 솔루션을 제안했습니다. 누구든지 더 나은 기술을 가진다면, 그는 분명 환영받을 것입니다.
편집 : 또한 char (acter)와 endl을 비교할 수 없습니다. 어떻게하면됩니까?
편집 : 작성한 코드가 작동하지 않습니다. 그것은 나에게 다음과 같은 오류를 준다.
Segmentation fault (core dumped)
참고 : .txt 파일 만 사용할 수 있습니다. .csv 파일은 사용할 수 없습니다.
예.널 종료가 아닌 문자열은 C 스타일 코드를 작성할 때 모든 종류의 문제를 일으킬 수 있습니다. 예 : 'strlen()'은 null 값을 찾을 때까지 문자열을 계속 스캔 할 것이기 때문에 약간의 미친 값을 리턴 할 것입니다. –
나는 C++로 모든 코드를 작성하지 않을 것이며 C로 작성하지 않을 것입니다. 그러면 C++에서 문제가 발생할 것입니까? –
이유 : firstName [x] + = temp [charPosition]; ? = (같음)뿐만 아니라 x var은 항상 각 값에서 동일한 값을 가지므로 파일의 모든 문자는 각 문자열의 0 위치에 쓰여지고 마지막 문자를 덮어 씁니다. – hidrargyro