C언어에서 text 파일의 라인수 확인하는 방법

kkb의 이미지

C언어에서 stat -l 처럼 text 파일의 라인수를 return 하는 표준 라이브러리 함수가 있을까요?

while()로 한줄씩 읽어서 세고 있는데
표준 라이브러리 함수가 있으면 가져다 쓰려구요.

익명 사용자의 이미지

없지 않나요? 저도 궁금합니다.

ymir의 이미지

파일을 라인 단위로 읽어들이는 함수들은 있어도 세어 주는 건 본 적 없는 것 같네요.
라인 단위로 읽는 것도 한계가 있는데, 한 줄이 버퍼보다 더 큰 경우에는 어떻게 처리해야 할 지 생각이 필요할 겁니다.
getline() 같은 애들도 괜찮긴 한데, 단순히 라인 수 세자고 alloc/free 반복하는 건 배보다 배꼽이 더 크죠.
그냥 버퍼 단위로 읽어들인 다음에, '\n' 의 개수를 세는 게 좀 더 편할 겁니다.

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

kkb의 이미지

다행히 문서 파일이 한 줄에 80자를 넘는 경우는 없어서 괜찮긴 한데
while문에서 fgets로 세는 건 어떤가요?

익명 사용자의 이미지

https://github.com/coreutils/coreutils/blob/master/src/wc.c

여기 wc 소스 315라인 부터 참고하세요

kkb의 이미지

최고의 레퍼런스 코드네요.
감사합니다.

ymir의 이미지

제약 사항을 정확히 알고 있고, 그 안에서 정확하게 통제되고 있는 상황이라면 그렇게 하셔도 무방합니다.
그런데 범용적으로 사용되고, 어떤 입력이 들어올지 알 수 없는 상황이라면, 사용하기 힘든 방법이 되겠죠.
라인이 버퍼보다 길면 fgets() 로 읽어들인 버퍼안에 '\n' 이 없을 테니, 결국 '\n' 이 있나 없나 검사해야 하는 건 같습니다.
위에 익명님이 소스 올려주신 것 처럼, 이미 알려진 명령어들의 소스를 보고 그 방식을 참고하는 것도 좋은 방법입니다.

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

라스코니의 이미지

chatgpt와 Bard에 짜 달라고 하시고 비교해 보세요.

세벌의 이미지

재미있는 답변이군요.
비교는 사람이 하나요?
비교하라고 chatGPT에게도 시키고, Bard에게도 시키고.
멋진 작품이 나올 듯 하네요. :)

댓글 달기

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