파일에서 특정 문자열 빼기

manatails007의 이미지

C언어로
파일을 열어서 특정 문자열을 찾은 뒤 그 문자를 빼고 다시 저장하는 것을 어떻게 구현해야 하나요?

예)
원래 파일의 내용 : aaaaaaaaaaaakldpaaaaaaaaaaaa
kldp란 문자열을 빼고
aaaaaaaaaaaaaaaaaaaaaaaa를 저장

hansolo의 이미지

성능 상관없이 단순무식노가다 코드로 짠다면 대략

prev_ptr = start_of_full_text;
while( (current_ptr = strstr(full_text,find_text)) != NULL )
{
      copy_to_file( prev_ptr, current_ptr );
      prev_ptr = current_ptr + strlen( find_text );
}

식으로 하면 되지 않을까요?

manatails007의 이미지

그런데 파일에서도 똑같이 하면 되나요? 10kb정도 되는 바이너리 파일인데

hansolo의 이미지

바이너리라면 NULL 때문에 strstr 같은 함수는 쓸 수 없을것 같은데요?

그냥 리니어서치를 해야 하려나요..;

ptr = start_of_file;
 
while( 파일의 끝에 도달할때 까지 )
{
        while( 특정 크기의 블럭을 파일에서 읽어와서 )
        {
               ptr = start_of_block;
 
               while( ptr가 블럭의 끝에 도달할 때 까지 )
               {
                    if( memcmp( ptr, 찾는내용, length_of_찾는내용 ) == 0 )
                         ptr += 찾는내용      // 파일에 안쓰고 skip
                    else
                         파일에 ptr 가 가리키는 1바이트 쓰고
                         ptr++; 
               }                              
        }
}

이런식으로 1바이트씩 움직이면서 비교하면 되지 싶습니다.

단 이때 블럭단위로 읽기 때문에 찾는 패턴이 블럭과 블럭 사이에서 잘릴 경우를 대비하여 다음 블럭을 읽어들일시에 찾는 패턴의 길이만큼 되돌아가서 읽는부분 등이 필요하지 싶네요.

(파일이 길지 않다면 그냥 한방에 읽어서 하는것도 나쁘지 않겠죠;;)

pokev25의 이미지

게다가..바이너리라면..

메모리로 읽어 들이세요 1M 도 아닌데..뭐 10kb 정도면 ..

메모리에서 처리 하셔서 그대로 다시 파일에 쓰시면 될듯

haze11의 이미지

gchar *str, **strs;

str = g_strdup("aaaaaaaaaaaakldpaaaaaaaaaaaa");

strs = g_strsplit(str, "kldp", -1);
str = g_strjoinv("", strs);

g_strfreev(strs);
g_free(str);

동작 하려나요 =.=;;

댓글 달기

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