[질문] 파일을 읽어서 라인끝의 개행처리한 엔터키값 삭제하는 방법은?
글쓴이: kimyh / 작성시간: 일, 2007/02/11 - 4:19오전
아래와 같은 소스에서 두번째줄을 읽어서 두번째줄끝의 개행문자인 엔터키값을 삭제하는 방법좀 부탁드립니다.
아래에서 fscanf(member_df, "%s[^\n]\n", mid); 이부분을 어떻게 처리해야 개행문자의 버퍼값을 없애는지 알고 싶습니다.
int pos = 2; /* 두 번째 라인을 읽습니다. */ int i; FILE *member_df; char mid[256]; memset(mid, 0, 256); member_df = fopen("identification.txt", "r"); for (i=0; i<pos; i++) fgets(mid, 256, member_df); fscanf(member_df, "%s[^\n]\n", mid); fclose(member_df); printf(mid);
위와 같이 하니 세번째줄의 값이 나옵니다.
fscanf(member_df, "%s[^\n]\n", mid);
이 라인에서 "%s[^\n]\n" 이 부분을 어떻게 처리해야 할지를 모르겠군요.
Forums:
답변 감사합니다. 그런데요...
제가 언급한 개행문자란 파일을 생성할때 줄을 바꾸기 위해 엔터키를 치므로써 그값이 버퍼에 저장된것을 의미한것 입니다.
제가 급하다 보니 설명이 좀 부족한것 같아 죄송하게 생각 합니다.
그런데 파일이 예를들어
"test.txt"
aaaaaaaaaaaa
bbbb
This is a book
ccccccc
ddddddddddd
라고 할경우 각 라인의 문자가 스페이스가 없다면 알려주신대로 하면 잘 됩니다.
그런데 세번째 라인처럼 중간에 스페이스가 있는경우에는 스페이스 전까지만 읽고 라인 전체를 읽지 못합니다.
아무래도 제가 fscanf(member_df, "%s[^\n]\n", mid); 이부분을 이해를 못한것 같군요.
제가 원하는건 특정라인의 문장사이에 스페이스가 있든 없든 라인전체를 라인 맨뒤의 엔터키값 없이 읽고자 한것 입니다.
man fscanf 페이지를 봐도 영어가 짧아서 이해하기가 여간 어렵지가 않아서요.(죄송...)
아시는분 계시면 도움좀 주시면 감사하겠습니다.
=========================================
살며 그리고 사랑하며...
정보는 공유할때 그 가치가 있는것.....
나의 조그만 지식공유는 남에게 엄청난 기쁨을 안겨 준다.
살며 그리고 사랑하며...
정보는 공유할때 그 가치가 있는것.....
나의 조그만 지식공유는 남에게 엄청난 기쁨을 안겨 준다.
이러면 될까요?
"%s[^\n]\n" 이 부분은 잘 모르겠지만요....
그냥 라인 읽어서 엔터키 삭제하는 부분이라면 저는
fgets(temp, 256, fp);
char* p;
if((p = strchr(temp, '\n'))!= NULL) *p = '\0';
그냥 이런식으로 처리하는데요
이걸 말씀하시는게 아닌거 같지만 혹시 해서 적어봅니다. ^^
답변 주신분들 정말 감사합니다.
답변 주신분들 정말 감사합니다.
어제 밤 꼬박 새웠습니다.
답변 주신대로 모두 해보니 잘 됩니다.
또 아래와 같은 방법도 잘 되더군요.
strtok() 함수를 함께 사용해도 해결되더군요.
다시한번 답변 해주신분들께 진심으로 감사드립니다.
열심히 공부 하겠습니다.
====================================
살며 그리고 사랑하며...
정보는 공유할때 그 가치가 있는것.....
나의 조그만 지식공유는 남에게 엄청난 기쁨을 안겨 준다.
살며 그리고 사랑하며...
정보는 공유할때 그 가치가 있는것.....
나의 조그만 지식공유는 남에게 엄청난 기쁨을 안겨 준다.
memory leak
위코드에서는 메모리릭이 발생합니다.
strdup 사용시는 꼭 free를 해주어야 합니다.
free를 쓰지 않으려면 strdupa 를 사용해야 합니다.
간단한 실수가 큰 버그를 만들죠.
스캔에프에 개행문자가 왜 들어가죠?
그리고 앞에 %s는 왜 붙은거죠?
가 아니고 이게 맞는거 같은데..
그냥 심심 해서 고쳐 봤습니다.
심심해서 고쳐봤는데,
댓글 달려고 보니, harisoo님이 정확한 지적을 하셨네요.
단순한 문제입니다.
fgets로 한 라인씩 읽고,
문자열의 마지막이 개행문자인지 검사해서 개행문자면 대신 eos를 넣으면 될 문제입니다.
while (fgets(buf, 256, f)) {
int len = strlen(buf);
if(D) printf("%s name len is %d\n", buf, len);
while(buf[len-1] == '\n' || buf[len-1] == '\r')
{
buf[len-1] = '\0';
len = strlen(buf);
}
}
댓글 달기