파일에 있는 문자의 숫자를 카운트 해야하는데 어떻게 하면 좋을까요? 쉬울것 같은데 잘 안돼네요.
항상 감사하는 마음으로...
wc를 사용하세요.
---------------------------- May the F/OSS be with you..
둘다 사용해 봤는데 실제 화일의 문자의 수를 출력할수 있는 기능은 없던데요. 어떻게 해야 할까요?
소스를 작성해서 파일의 총 문자수를 구해야 해요.
질문하신분이 적으신 문자라는게 무슨 뜻인지 확실히 하시는게 좋겠군요
뜻하는 것이 아스키 코드이고 일반 텍스트 파일이라면 그냥 fstat 사용하시면 되고
그외의경우라면 프로그래밍 하셔야 됩니다.
만약 a.c 라는 파일이 있다구해요. #include<stdio.h> ---> 17개 main() ---> 6개 { ---> 1개
} ----> 1개
이렇게 읽어서 화일의 총 문자수를 구하는겁니다. 어떻게 하면 조을까요. 도와 주세요.
man fgets man strlen
세벌 https://sebuls.blogspot.kr/
cat a.c | tr -d [:blank:] | tr -d '\n' |wc -c
한글 2바이트를 1글자로 취급한다면 단순히 wc로 하는것은 의미가 없군요. 한글 한자를 한글자로 인정하는지 아니면 ASCII 문자를 한글자로 인정하는지가 먼저 필요하겠네요..
일반적인 경우는 위처럼 wc 와 tr의 조합으로 가능하겠습니다만 multibyte charset를 고려한다면... 복잡한 상황이 되겠네요..
What do you want to eat?
윈도우에서는 아래와 같이 하시면 됩니다만, 비윈도우 플랫폼에서는 어찌하는지 모르겠네요. 아마 비슷한 방법이 있겠죠. string을 wstring으로 바꾸기만 하면 그다음은 쉬운거니까요.
USES_CONVERSION; A2W 는 VC에서만 될겁니다. atlbase.h를 이용하는거니까요. 비슷한 방법을 찾아보세요. 한글이든 영문이든 똑 같이 적용됩니다.
ps. 글을 쓰고 보니 파일이 unicode라면 안되는 단점이 있군요 -_-;;
#include <iostream> #include <string> #include <fstream> #include <atlbase.h> using std::cout; using std::string; using std::endl; int main (int argc, char* argv[]) { if (argc < 2) { cout << "usage: wc filename" << endl ; return 0 ; } std::ifstream in (argv[1]) ; if (!in) { cout << "can't open file: " << argv[1] << endl ; return 0 ; } int wc = 0 ; string istr ; while (std::getline (in, istr)) { string::size_type pos = 0 ; int space = 0 ; while ((pos = istr.find (" ", pos)) != string::npos) { ++space ; ++pos ; } USES_CONVERSION; std::wstring wstr = A2W (istr.c_str ()) ; wc += wstr.length() - space ; } cout << "Total count: " << wc << endl ; return 0 ; }
산넘어 산
딴지 같지만, 파일은 결코 unicode일 수 없습니다. 무슨 말슴이신지;
--feanor
unicode로 저장된 파일이요 -_-
unicode를 어떻게 파일로 저장해요 -_-
저도 심심해서 c로 함 만들어 보았습니다.
#include <stdio.h> int main(int argc, char **argv) { FILE * fp; char fname[32]; char buff[1024]; int num = 0; int i = 0; memset( buff, 0x00, sizeof(buff)); snprintf(fname, sizeof(fname),"%s","./temp.dat"); fp = fopen( fname, "r"); if(fp == NULL) { perror("fopen"); exit(1); } while( fgets(buff, sizeof(buff), fp) ) { buff[strlen(buff)-1] = 0; for( i = 0 ; i < strlen(buff) ; i++) { if( !isspace(buff[i]) ) num++; } memset(buff, 0x00, sizeof(buff)); } printf("\n[%d]\n",num); return 0; }
부연하자면: 파일에 저장되는 것은 unicode가 아니라 unicode의 "인코딩"입니다. unicode는 character set입니다.
일반적으로 쓰는 말아닌가요. 너무 민감하게 반응하시는듯.
그냥 아스키파일이라고 하지 아스키로 인코딩된 파일이라고 잘 안하지 않나요? 같은 의미로 썼을뿐입니다.
ps. thread hijacking이 되버렸군요.
...근데, 아스키로 인코딩된 파일은 있는데, 유니코드로 인코딩된 파일은 없거든요. (음, 저도 계속 별 영양가 없는 이야기 하긴 싫습니다만...)
답변 정말 감사합니다. 전 아직 초보라 유닉스에서 그냥 간단하게 C로 구현 할려고 합니다. C++은 아직 몰라요. 부탁 드려요. 방법이 없을까요?
요즘은 텍스트 파일에 거의 유니코드를 씁니다. 윈도우(XP) 메모장에서 기본으로 사용하는 인코딩이 유니코드입니다.
XML도 유니코드가 기본인걸로 압니다.
죄송하지만 윈도우 XP 메모장에서 기본으로 사용하는 인코딩은 UCS2입니다. UCS2는 유니코드 인코딩의 한가지입니다. 유니코드를 파일에 저장하는 방법은 없습니다.
한편, GNU 시스템의 내부 인코딩은 UCS4입니다.
XML의 기본 유니코드 인코딩은 UTF8입니다.
제가 개념이 없나봅니다. 그런식으로 따진다면 아스키파일도 없는것이 아닌가요? 자세한 설명이나 메뉴얼 부탁드립니다.
아. 무슨 뜻인지 이해했습니다.
charset과 실제로 사용하는 인코딩과의 차이를 말하신거군요.
음 전 아직도 잘 이해가 안가는데.. 위에 분들 말씀 자세히 정리 한 번 해주시거나, 관련 문서, 매뉴얼 좀.. 부탁드립니다..
유니코드를 파일로 저장할수 없는것은 아니고 파일로 저장하여 내용을보면 일반적으로는 못보겠죠.. 특별히 볼수 있는프로그램으로 따로 보지 않으면..
일반적으로 호환을 위해서 UTF-8등으로 인코딩하지만 하나의 문자로 인식한다는기준은 디코딩된 완성된문자일것이기 때문에 어떤포멧만을 지원할것인지등도 고려해야겠죠.
만일 아스키코드만 지원한다거나 모든 8비트문자만 인식한다면 간단히 되겠죠. 아마 프로그램의 편의성을위해서는 그렇게 할것같은데요..
----------------------------------------------------------------------------
유니코드를 파일로 저장할 수 없다..
참 이상한 말 같네요.
혹시 "파일"과 "아스키 파일"을
동일한 개념으로 사용하시는 건지
모르겠습니다.
특정 코드 set를 파일로 사용할려면 당연 인코딩, 디코딩이 뒤따르는게
아닐지요..
마침 비슷한 소스를 갖고 있어서 올려봅니다.
c포인터 완전제패에 나온소스입니다. 그럼...
H/W가 컴퓨터의 심장이라면 S/W는 컴퓨터의 영혼이다!
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
Re: 파일에 들어 있는 문자수의 총수를 출력 해야하는데요.
stat , fstat와 같은 함수를 이용하시면 됩니다.
항상 감사하는 마음으로...
Re: 파일에 들어 있는 문자수의 총수를 출력 해야하는데요.
wc를 사용하세요.
----------------------------
May the F/OSS be with you..
stat fstat 둘다 사용해 봤는데요.
둘다 사용해 봤는데
실제 화일의 문자의 수를 출력할수 있는 기능은 없던데요.
어떻게 해야 할까요?
wc를 사용하는게 아니고 직접 간단하게 소스를 만들어야 하거든
소스를 작성해서
파일의 총 문자수를 구해야 해요.
질문하신분이 적으신 문자라는게 무슨 뜻인지 확실히 하시는게 좋겠군요
질문하신분이 적으신 문자라는게 무슨 뜻인지 확실히 하시는게 좋겠군요
뜻하는 것이 아스키 코드이고
일반 텍스트 파일이라면 그냥 fstat 사용하시면 되고
그외의경우라면 프로그래밍 하셔야 됩니다.
제말이 잘 전달 안됐네요.
만약 a.c 라는 파일이 있다구해요.
#include<stdio.h> ---> 17개
main() ---> 6개
{ ---> 1개
} ----> 1개
이렇게 읽어서 화일의 총 문자수를 구하는겁니다.
어떻게 하면 조을까요.
도와 주세요.
[code:1]man fgetsman strlen[/code:1]
세벌 https://sebuls.blogspot.kr/
cat a.c | tr -d [:blank:] | tr -d '\n'
cat a.c | tr -d [:blank:] | tr -d '\n' |wc -c
한글 2바이트를 1글자로 취급한다면 단순히 wc로 하는것은 의미가 없군요
한글 2바이트를 1글자로 취급한다면 단순히 wc로 하는것은 의미가 없군요.
한글 한자를 한글자로 인정하는지 아니면 ASCII 문자를 한글자로 인정하는지가 먼저 필요하겠네요..
일반적인 경우는 위처럼 wc 와 tr의 조합으로 가능하겠습니다만 multibyte charset를 고려한다면... 복잡한 상황이 되겠네요..
What do you want to eat?
윈도우에서는 아래와 같이 하시면 됩니다만, 비윈도우 플랫폼에서는 어찌하는
윈도우에서는 아래와 같이 하시면 됩니다만, 비윈도우 플랫폼에서는 어찌하는지 모르겠네요. 아마 비슷한 방법이 있겠죠. string을 wstring으로 바꾸기만 하면 그다음은 쉬운거니까요.
USES_CONVERSION;
A2W
는 VC에서만 될겁니다. atlbase.h를 이용하는거니까요. 비슷한 방법을 찾아보세요. 한글이든 영문이든 똑 같이 적용됩니다.
ps. 글을 쓰고 보니 파일이 unicode라면 안되는 단점이 있군요 -_-;;
산넘어 산
[quote="dudungsil"]ps. 글을 쓰고 보니 파일이 un
딴지 같지만, 파일은 결코 unicode일 수 없습니다. 무슨 말슴이신지;
--feanor
unicode로 저장된 파일이요 -_-
unicode로 저장된 파일이요 -_-
산넘어 산
unicode를 어떻게 파일로 저장해요 -_-
unicode를 어떻게 파일로 저장해요 -_-
문자 수 세기
저도 심심해서 c로 함 만들어 보았습니다.
부연하자면: 파일에 저장되는 것은 unicode가 아니라 unicode의
부연하자면: 파일에 저장되는 것은 unicode가 아니라 unicode의 "인코딩"입니다. unicode는 character set입니다.
--feanor
일반적으로 쓰는 말아닌가요. 너무 민감하게 반응하시는듯.그냥 아스
일반적으로 쓰는 말아닌가요. 너무 민감하게 반응하시는듯.
그냥 아스키파일이라고 하지 아스키로 인코딩된 파일이라고 잘 안하지 않나요? 같은 의미로 썼을뿐입니다.
ps. thread hijacking이 되버렸군요.
산넘어 산
...근데, 아스키로 인코딩된 파일은 있는데, 유니코드로 인코딩된 파일은
...근데, 아스키로 인코딩된 파일은 있는데, 유니코드로 인코딩된 파일은 없거든요. (음, 저도 계속 별 영양가 없는 이야기 하긴 싫습니다만...)
--feanor
휴~~~ 전 유닉스 환겅입니다.
답변 정말 감사합니다.
전 아직 초보라 유닉스에서 그냥 간단하게 C로 구현 할려고 합니다.
C++은 아직 몰라요.
부탁 드려요. 방법이 없을까요?
Re: 휴~~~ 전 유닉스 환겅입니다.
지금까지 여러분들이 답글을 달아주신 것을 잘 보시고 생각을 해 보시면 풀 수 있는 문제라고 생각되는군요. 지금까지의 답변을 보고도 잘 모르겠다면 쉬운 C 언어 책 하나 보시면서 파일 입출력에 대한 부분을 공부해 보세요.
세벌 https://sebuls.blogspot.kr/
원래 주제는 아니지만.
요즘은 텍스트 파일에 거의 유니코드를 씁니다.
윈도우(XP) 메모장에서 기본으로 사용하는 인코딩이 유니코드입니다.
XML도 유니코드가 기본인걸로 압니다.
죄송하지만 윈도우 XP 메모장에서 기본으로 사용하는 인코딩은 UCS2입니
죄송하지만 윈도우 XP 메모장에서 기본으로 사용하는 인코딩은 UCS2입니다. UCS2는 유니코드 인코딩의 한가지입니다. 유니코드를 파일에 저장하는 방법은 없습니다.
한편, GNU 시스템의 내부 인코딩은 UCS4입니다.
XML의 기본 유니코드 인코딩은 UTF8입니다.
--feanor
제가 개념이 없나봅니다.그런식으로 따진다면 아스키파일도 없는것이 아닌
제가 개념이 없나봅니다.
그런식으로 따진다면 아스키파일도 없는것이 아닌가요?
자세한 설명이나 메뉴얼 부탁드립니다.
아. 무슨 뜻인지 이해했습니다.charset과 실제로 사용하는 인
아. 무슨 뜻인지 이해했습니다.
charset과 실제로 사용하는 인코딩과의 차이를 말하신거군요.
음 전 아직도 잘 이해가 안가는데.. 위에 분들 말씀 자세히 정리 한 번
음 전 아직도 잘 이해가 안가는데.. 위에 분들 말씀 자세히 정리 한 번 해주시거나, 관련 문서, 매뉴얼 좀.. 부탁드립니다..
유니코드를 파일로 저장할수 없는것은 아니고 파일로 저장하여 내용을보면
유니코드를 파일로 저장할수 없는것은 아니고 파일로 저장하여 내용을보면
일반적으로는 못보겠죠.. 특별히 볼수 있는프로그램으로 따로 보지 않으면..
일반적으로 호환을 위해서 UTF-8등으로 인코딩하지만
하나의 문자로 인식한다는기준은 디코딩된 완성된문자일것이기 때문에
어떤포멧만을 지원할것인지등도 고려해야겠죠.
만일 아스키코드만 지원한다거나 모든 8비트문자만 인식한다면 간단히 되겠죠.
아마 프로그램의 편의성을위해서는 그렇게 할것같은데요..
----------------------------------------------------------------------------
이상하군요.
유니코드를 파일로 저장할 수 없다..
참 이상한 말 같네요.
혹시 "파일"과 "아스키 파일"을
동일한 개념으로 사용하시는 건지
모르겠습니다.
특정 코드 set를 파일로 사용할려면 당연 인코딩, 디코딩이 뒤따르는게
아닐지요..
이런걸 찾는건가요?
마침 비슷한 소스를 갖고 있어서 올려봅니다.
c포인터 완전제패에 나온소스입니다. 그럼...
H/W가 컴퓨터의 심장이라면 S/W는 컴퓨터의 영혼이다!
댓글 달기