파일에 들어 있는 문자수의 총수를 출력 해야하는데요.

phscom의 이미지

파일에 있는 문자의 숫자를 카운트 해야하는데
어떻게 하면 좋을까요?
쉬울것 같은데 잘 안돼네요.

File attachments: 
첨부파일 크기
파일 word_count.tar50 KB
meconfidence의 이미지

phscom wrote:
파일에 있는 문자의 숫자를 카운트 해야하는데
어떻게 하면 좋을까요?
쉬울것 같은데 잘 안돼네요.

stat , fstat와 같은 함수를 이용하시면 됩니다.

항상 감사하는 마음으로...

hey의 이미지

phscom wrote:
파일에 있는 문자의 숫자를 카운트 해야하는데
어떻게 하면 좋을까요?
쉬울것 같은데 잘 안돼네요.

wc를 사용하세요.


----------------------------
May the F/OSS be with you..


phscom의 이미지

둘다 사용해 봤는데
실제 화일의 문자의 수를 출력할수 있는 기능은 없던데요.
어떻게 해야 할까요?

phscom의 이미지

소스를 작성해서
파일의 총 문자수를 구해야 해요.

nachnine의 이미지

질문하신분이 적으신 문자라는게 무슨 뜻인지 확실히 하시는게 좋겠군요

뜻하는 것이 아스키 코드이고
일반 텍스트 파일이라면 그냥 fstat 사용하시면 되고

그외의경우라면 프로그래밍 하셔야 됩니다.

phscom의 이미지

만약 a.c 라는 파일이 있다구해요.
#include<stdio.h> ---> 17개
main() ---> 6개
{ ---> 1개

} ----> 1개

이렇게 읽어서 화일의 총 문자수를 구하는겁니다.
어떻게 하면 조을까요.
도와 주세요.

세벌의 이미지

man fgets
man strlen
ts의 이미지

cat a.c | tr -d [:blank:] | tr -d '\n' |wc -c

whitekid의 이미지

한글 2바이트를 1글자로 취급한다면 단순히 wc로 하는것은 의미가 없군요.
한글 한자를 한글자로 인정하는지 아니면 ASCII 문자를 한글자로 인정하는지가 먼저 필요하겠네요..

일반적인 경우는 위처럼 wc 와 tr의 조합으로 가능하겠습니다만 multibyte charset를 고려한다면... 복잡한 상황이 되겠네요..

What do you want to eat?

dudungsil의 이미지

윈도우에서는 아래와 같이 하시면 됩니다만, 비윈도우 플랫폼에서는 어찌하는지 모르겠네요. 아마 비슷한 방법이 있겠죠. 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 ;
}

산넘어 산

feanor의 이미지

dudungsil wrote:

ps. 글을 쓰고 보니 파일이 unicode라면 안되는 단점이 있군요 -_-;;

딴지 같지만, 파일은 결코 unicode일 수 없습니다. 무슨 말슴이신지;

--feanor

dudungsil의 이미지

unicode로 저장된 파일이요 -_-

산넘어 산

feanor의 이미지

unicode를 어떻게 파일로 저장해요 -_-

moonzoo의 이미지

저도 심심해서 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;

}
feanor의 이미지

부연하자면: 파일에 저장되는 것은 unicode가 아니라 unicode의 "인코딩"입니다. unicode는 character set입니다.

--feanor

dudungsil의 이미지

일반적으로 쓰는 말아닌가요. 너무 민감하게 반응하시는듯.

그냥 아스키파일이라고 하지 아스키로 인코딩된 파일이라고 잘 안하지 않나요? 같은 의미로 썼을뿐입니다.

ps. thread hijacking이 되버렸군요.

산넘어 산

feanor의 이미지

...근데, 아스키로 인코딩된 파일은 있는데, 유니코드로 인코딩된 파일은 없거든요. (음, 저도 계속 별 영양가 없는 이야기 하긴 싫습니다만...)

--feanor

phscom의 이미지

답변 정말 감사합니다.
전 아직 초보라 유닉스에서 그냥 간단하게 C로 구현 할려고 합니다.
C++은 아직 몰라요.
부탁 드려요. 방법이 없을까요?

세벌의 이미지

phscom wrote:
답변 정말 감사합니다.
전 아직 초보라 유닉스에서 그냥 간단하게 C로 구현 할려고 합니다.
C++은 아직 몰라요.
부탁 드려요. 방법이 없을까요?

지금까지 여러분들이 답글을 달아주신 것을 잘 보시고 생각을 해 보시면 풀 수 있는 문제라고 생각되는군요. 지금까지의 답변을 보고도 잘 모르겠다면 쉬운 C 언어 책 하나 보시면서 파일 입출력에 대한 부분을 공부해 보세요.
myueho의 이미지

요즘은 텍스트 파일에 거의 유니코드를 씁니다.
윈도우(XP) 메모장에서 기본으로 사용하는 인코딩이 유니코드입니다.

XML도 유니코드가 기본인걸로 압니다.

feanor의 이미지

죄송하지만 윈도우 XP 메모장에서 기본으로 사용하는 인코딩은 UCS2입니다. UCS2는 유니코드 인코딩의 한가지입니다. 유니코드를 파일에 저장하는 방법은 없습니다.

한편, GNU 시스템의 내부 인코딩은 UCS4입니다.

XML의 기본 유니코드 인코딩은 UTF8입니다.

--feanor

myueho의 이미지

제가 개념이 없나봅니다.
그런식으로 따진다면 아스키파일도 없는것이 아닌가요?
자세한 설명이나 메뉴얼 부탁드립니다.

myueho의 이미지

아. 무슨 뜻인지 이해했습니다.

charset과 실제로 사용하는 인코딩과의 차이를 말하신거군요.

redglim의 이미지

음 전 아직도 잘 이해가 안가는데.. 위에 분들 말씀 자세히 정리 한 번 해주시거나, 관련 문서, 매뉴얼 좀.. 부탁드립니다..

ㅡ,.ㅡ;;의 이미지

유니코드를 파일로 저장할수 없는것은 아니고 파일로 저장하여 내용을보면
일반적으로는 못보겠죠.. 특별히 볼수 있는프로그램으로 따로 보지 않으면..

일반적으로 호환을 위해서 UTF-8등으로 인코딩하지만
하나의 문자로 인식한다는기준은 디코딩된 완성된문자일것이기 때문에
어떤포멧만을 지원할것인지등도 고려해야겠죠.

만일 아스키코드만 지원한다거나 모든 8비트문자만 인식한다면 간단히 되겠죠.
아마 프로그램의 편의성을위해서는 그렇게 할것같은데요..


----------------------------------------------------------------------------

moonzoo의 이미지

유니코드를 파일로 저장할 수 없다..

참 이상한 말 같네요.

혹시 "파일"과 "아스키 파일"을

동일한 개념으로 사용하시는 건지

모르겠습니다.

특정 코드 set를 파일로 사용할려면 당연 인코딩, 디코딩이 뒤따르는게

아닐지요..

불량청년의 이미지

마침 비슷한 소스를 갖고 있어서 올려봅니다.

c포인터 완전제패에 나온소스입니다. 그럼...

댓글 첨부 파일: 
첨부파일 크기
파일 0바이트

H/W가 컴퓨터의 심장이라면 S/W는 컴퓨터의 영혼이다!

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.