묻고답하기
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
개행문자에 대한 질문요...
2004.04.09 21:39
아...헷갈려서 정말로 미치겠네요. 하루 종일 이런 저런 테스트 하다가
질문을 올려봅니다.
질문1>
먼저 test.txt 파일을 만들었습니다.
파일의 내용은...
abcde
12345
입니다.
이 파일을 가지고 다음과 같이 코딩을 했습니다.
<소스내용>
$fp=fopen("./test.txt","r+");
fseek($fp,5,SEEK_SET);
$fr1=fread($fp,1);
if($fr1=="n"){
echo "개행문자<br>";
}else{
echo $fr1."<br>";
}
fseek($fp,6,SEEK_SET);
$fr2=fread($fp,1);
if($fr2=="n"){
echo "개행문자<br>";
}else{
echo $fr2."<br>";
}
fseek($fp,7,SEEK_SET);
echo fread($fp,1)."<br>";
fclose($fp);
<결과>
(공백문자)
개행문자
1
test.txt 파일 내용을 보시면 e문자 뒤에 개행문자에 의해 줄바꿈이 되었는데요.
분명 test.txt 파일에는 개행문자 앞에 공백문자가 없거든요.
그런데, 실행해 보면 자꾸 개행문자 앞에 공백문자가 붙어있는 것으로 출력이 되네요..
원래 개행문자 앞에는 공백문자가 존재하는 건가요??
그렇다면 개행문자 크기는 2byte인가요?
질문2>
이번에는 만들어진 파일을 읽어들이지 않고, 직접 fwrite명령으로 파일에 쓰기를 해 보았습니다.
<소스내용>
$fp=fopen("./test2.txt","w+");
fwrite($fp,"abcden12345");
rewind($fp);
echo fread($fp,100);
fclose($fp);
<브라우저에 출력된 결과>
abcde 12345
<브라우저에 출력된 소스>
abcde
12345
<test2.txt 파일의 내용>
abcde12345
이번에는 직접 e문자 뒤에 개행문자 n 을 삽입하였는데요. 브라우저에 출력된 소스는
제가 생각한대로 줄바꿈이 되었는데, test2.txt 파일에는 줄바꿈이 되지 않고 그대로 연결
되어서 쓰기가 되어버렸어요. ㅡㅡ;;
왜 test2.txt 파일에는 줄바꿈이 되지 않고, 그대로 연결되어서 쓰기가 되는건가요??
그리고 abcde와 12345 사이에 왜 공백문자가 생기는 건가요? 위에서 질문 드린데로 개행문자
앞에는 항상 공백문자가 따라 붙는건가요?
질문3)
이번에는 "질문1"의 소스와 "질문2"의 소스를 합쳐서 테스트를 해 봤습니다.
즉, fwrite로 파일에 직접 쓰고, 읽어들여 봤습니다. 소스내용은...
<소스내용>
$fp=fopen("./test2.txt","w+");
fwrite($fp,"abcden12345");
rewind($fp);
echo fread($fp,100)."<br>";
fclose($fp);
$fp=fopen("./test2.txt","r+");
fseek($fp,5,SEEK_SET);
$fr1=fread($fp,1);
if($fr1=="n"){
echo "개행문자<br>";
}else{
echo $fr1."<br>";
}
fseek($fp,6,SEEK_SET);
$fr2=fread($fp,1);
if($fr2=="n"){
echo "개행문자<br>";
}else{
echo $fr2."<br>";
}
fseek($fp,7,SEEK_SET);
echo fread($fp,1)."<br>";
fclose($fp);
<출력결과>
abcde 12345
개행문자
1
2
결과가 위와 같이 나왔어요. test2.txt 파일의 내용은 ...
abcde12345
인데, 어떻게 해서 저런 결과가 나오게 되는 건가요??
만약, e 뒤에 개행문자가 붙어 있다고 가정하더라도(개행문자 앞에는 항상 공백문자가 붙는다는
가정하에...) 결과가...
(공백문자)
개행문자
1
이렇게 나와야 하는거 아닌가요??
질문이 좀 횡설수설한지는 모르겠지만, 정말로 이것 때문에 헷갈려서 미쳐 죽기 일보
직전입니다.
좋은 답변 간절히 간절히 기다릴께요 (__)
질문을 올려봅니다.
질문1>
먼저 test.txt 파일을 만들었습니다.
파일의 내용은...
abcde
12345
입니다.
이 파일을 가지고 다음과 같이 코딩을 했습니다.
<소스내용>
$fp=fopen("./test.txt","r+");
fseek($fp,5,SEEK_SET);
$fr1=fread($fp,1);
if($fr1=="n"){
echo "개행문자<br>";
}else{
echo $fr1."<br>";
}
fseek($fp,6,SEEK_SET);
$fr2=fread($fp,1);
if($fr2=="n"){
echo "개행문자<br>";
}else{
echo $fr2."<br>";
}
fseek($fp,7,SEEK_SET);
echo fread($fp,1)."<br>";
fclose($fp);
<결과>
(공백문자)
개행문자
1
test.txt 파일 내용을 보시면 e문자 뒤에 개행문자에 의해 줄바꿈이 되었는데요.
분명 test.txt 파일에는 개행문자 앞에 공백문자가 없거든요.
그런데, 실행해 보면 자꾸 개행문자 앞에 공백문자가 붙어있는 것으로 출력이 되네요..
원래 개행문자 앞에는 공백문자가 존재하는 건가요??
그렇다면 개행문자 크기는 2byte인가요?
질문2>
이번에는 만들어진 파일을 읽어들이지 않고, 직접 fwrite명령으로 파일에 쓰기를 해 보았습니다.
<소스내용>
$fp=fopen("./test2.txt","w+");
fwrite($fp,"abcden12345");
rewind($fp);
echo fread($fp,100);
fclose($fp);
<브라우저에 출력된 결과>
abcde 12345
<브라우저에 출력된 소스>
abcde
12345
<test2.txt 파일의 내용>
abcde12345
이번에는 직접 e문자 뒤에 개행문자 n 을 삽입하였는데요. 브라우저에 출력된 소스는
제가 생각한대로 줄바꿈이 되었는데, test2.txt 파일에는 줄바꿈이 되지 않고 그대로 연결
되어서 쓰기가 되어버렸어요. ㅡㅡ;;
왜 test2.txt 파일에는 줄바꿈이 되지 않고, 그대로 연결되어서 쓰기가 되는건가요??
그리고 abcde와 12345 사이에 왜 공백문자가 생기는 건가요? 위에서 질문 드린데로 개행문자
앞에는 항상 공백문자가 따라 붙는건가요?
질문3)
이번에는 "질문1"의 소스와 "질문2"의 소스를 합쳐서 테스트를 해 봤습니다.
즉, fwrite로 파일에 직접 쓰고, 읽어들여 봤습니다. 소스내용은...
<소스내용>
$fp=fopen("./test2.txt","w+");
fwrite($fp,"abcden12345");
rewind($fp);
echo fread($fp,100)."<br>";
fclose($fp);
$fp=fopen("./test2.txt","r+");
fseek($fp,5,SEEK_SET);
$fr1=fread($fp,1);
if($fr1=="n"){
echo "개행문자<br>";
}else{
echo $fr1."<br>";
}
fseek($fp,6,SEEK_SET);
$fr2=fread($fp,1);
if($fr2=="n"){
echo "개행문자<br>";
}else{
echo $fr2."<br>";
}
fseek($fp,7,SEEK_SET);
echo fread($fp,1)."<br>";
fclose($fp);
<출력결과>
abcde 12345
개행문자
1
2
결과가 위와 같이 나왔어요. test2.txt 파일의 내용은 ...
abcde12345
인데, 어떻게 해서 저런 결과가 나오게 되는 건가요??
만약, e 뒤에 개행문자가 붙어 있다고 가정하더라도(개행문자 앞에는 항상 공백문자가 붙는다는
가정하에...) 결과가...
(공백문자)
개행문자
1
이렇게 나와야 하는거 아닌가요??
질문이 좀 횡설수설한지는 모르겠지만, 정말로 이것 때문에 헷갈려서 미쳐 죽기 일보
직전입니다.
좋은 답변 간절히 간절히 기다릴께요 (__)
댓글 2
-
써니루루☆
2004.04.09 22:36
-
김민규
2004.04.10 14:18
그렇군요...윈도우에서는 \r\n , unix 계열에서는 \n...
이것 때문에 미칠뻔했는데, ㅡㅡ;
답변 감사드려요(__)
windows 계열과 unix계열에서 개행문자가 틀리기 때문이죠.
windows 계열에선 \r\n 이고
unix 계열에선 \n입니다.
\r은 캐리지 리턴
\n은 new line을 뜻하죠.