c에서 파일 출력

mindon의 이미지

파일 처리에 대한 질문 드립니다.

제가 원하는 것은 어느 파일을 열고, 그 파일에서 특정 단어가 들어간 라인을 찾아서 지우는 것입니다.

우선 파일은 "r+" (갱신)으로 열고 fgets()로 해당 line까지는 찾았는데, 어떻게 해야 그 라인이 지워지는지 모르겠네요.. -.-

아시는 분 답변 부탁드립니다..

vinus의 이미지

그라인 자체의 완전한 삭제를 원한다면, 파일을 다시 기록 하십시오.
만일 해당 라인을 스페이스등 다른 문자로 체워도 상관 없다면, fseek등을 이용하여 현재의 위치를 되돌린 다음 다른 문자로 체워 넣으세요.

>>>행복한 웃음<<<

mindon의 이미지

죄송하지만, "파일을 다시 기록 "의 구체적인 뜻이 뭔가요?

thisrule의 이미지

mindon wrote:
죄송하지만, "파일을 다시 기록 "의 구체적인 뜻이 뭔가요?

입력 파일을 읽어 다른 파일에 저장하는 겁니다.
그때 원하는 라인은 저장하지 않으면 되죠.
마지막에 저장된 파일을 원래의 파일로 mv 하면, 결국 다시 기록하는게 됩니다.
cedar의 이미지

원본 파일을 지우는 기능은 없습니다.

#include <iostream>
#include <fstream>
#include <string>
#include <iterator>
#include <algorithm>

template <typename T>
struct line
{
    T str_;
    line() {}
    line(const std::string& s) : str_(s) {}
    operator T() const { return str_; }
};

template <typename T>
std::istream& operator>>(std::istream& is, line<T>& sl)
{ 
    return std::getline(is, sl.str_);
}

template <typename T>
std::ostream& operator<<(std::ostream& os, const line<T>& sl)
{ 
    return os << sl.str_ << std::endl; 
}

template <typename T>
struct line_include
{
	T str_;
	line_include(const T& s) : str_(s) {}
	bool operator()(const line<T>& l) 
	{ 
		return l.str_.find(str_) != T::npos;
	}
};

int main(int argc, char* argv[])
{
	using namespace std;

	if (argc >= 3)
		remove_copy_if(
			istream_iterator<line<string> >(ifstream(argv[1])), 
			istream_iterator<line<string> >(),
			ostream_iterator<line<string> >(ofstream(argv[2])),
			line_include<string>(string(argv[3])));
	else
		cout << "Usage: removeline infile outfle word\n";
	
	return 0;
}

main()에서는 one-liner가 되게 만들었습니다. 8)

댓글 달기

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