화일에서 숫자를 읽어 오려하는데, 예외처리를 어떻게 해야 할까

lacovnk의 이미지

file에 다음과 갈이 저장되어있습니다.

숫자\t숫자\t.......숫자\t\n
숫자\t숫자\t.......숫자\t\n
숫자\t숫자\t.......숫자\t\n
숫자\t숫자\t.......숫자\t\n

이를 차례로 읽어오고, 만약 \n이나 EOF를 만나면 예외라고 알려주고 싶은데,

이를 어떻게 해야 할까요?

1. fscanf("%d\t",buffer) 를 이용하는건, EOF가 아니고 매칭이 안될 경우 0을 돌려보낸다고 맨페이지에 있어서 포기

2. fgetc()로 계속 읽어들이면서, \t를 만나면 이전까지 읽은 char들을 이용하여 int로 변환
-> 꽤 귀찮게 될것 같은데.. char* 를 선언해야 할테고.. sptrinf를 쓰려면 순서가 뒤바뀌니 곧바로 사용을 할수도 없을 테고...

지금 두가지를 생각해 봤는데, 좋은 방법이 없을까요?

hados의 이미지

lacovnk wrote:
file에 다음과 갈이 저장되어있습니다.
숫자\t숫자\t.......숫자\t\n
숫자\t숫자\t.......숫자\t\n
숫자\t숫자\t.......숫자\t\n
숫자\t숫자\t.......숫자\t\n

이를 차례로 읽어오고, 만약 \n이나 EOF를 만나면 예외라고 알려주고 싶은데,

이를 어떻게 해야 할까요?

1. fscanf("%d\t",buffer) 를 이용하는건, EOF가 아니고 매칭이 안될 경우 0을 돌려보낸다고 맨페이지에 있어서 포기

2. fgetc()로 계속 읽어들이면서, \t를 만나면 이전까지 읽은 char들을 이용하여 int로 변환
-> 꽤 귀찮게 될것 같은데.. char* 를 선언해야 할테고.. sptrinf를 쓰려면 순서가 뒤바뀌니 곧바로 사용을 할수도 없을 테고...

지금 두가지를 생각해 봤는데, 좋은 방법이 없을까요?

strtok() , strtok_r() 함수를 사용하시는 건 어떤가요?

더 이상 읽을 토큰이 없다면 NULL 을 리턴해 주니 나름대로 괜찮을 것 같은데요...

dreamer의 이미지

fgets()으로 한 라인씩 읽은후 각 라인에대해 strtok()를 이용하면 되지 않을까요
strtok는 man 하면 사용법 예제 까지 나오니 여기에 따로 적을 필요는 없을 듯 합니다.

정태영의 이미지

lacovnk wrote:
1. fscanf("%d\t",buffer) 를 이용하는건, EOF가 아니고 매칭이 안될 경우 0을 돌려보낸다고 맨페이지에 있어서 포기

fscanf( " %d", buffer );

이 정도만 해도 될듯 한데요 ;)
앞에 공백을 넣어주면 탭이나 뉴라인.. 스페이스등의 공백은 무시하니까요 ;)

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

lacovnk의 이미지

/t숫자/t숫자/t숫자/n
/t숫자/t숫자/t숫자/n
/t숫자/t숫자/t숫자/n

이런식으로 저장한 다음에 읽을때 다음과 같이 합니다.

1. fgetc 해서 /t인지 확인 -> /n일 경우 한줄이 끝났다고 알려준다. EOF도 확인 가능
2. 그리고 fscanf("%d",ptr) 해서, 숫자를 얻어낸다.

일단, 한줄의 길이가 얼마가 될지 몰라서, strtok는 포기..입니다만. (스트링에 저장을 할수가 없으니...) 이용하는 방법이 있을까요? 으음.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.