Вычеркнуть строку в текстовом файле (Windows)

#c #windows #file #text

#c #Windows #файл #текст

Вопрос:

В настоящее время у меня есть несколько сотен строк пути к файлу в текстовом файле, который мне нужно вычеркнуть, например

 report2011510222820.html:   <td width="60%" bgcolor="#f4f4f4" class="tablebody" valign="top">C:UsersAdministratorDesktopcalc.exe</td>
  

Как я мог убрать « report2011510222820.html: amp;<td width="60%" bgcolor="#f4f4f4" class="tablebody" valign="top"amp;>" and "amp;</tdamp;> «, поэтому я просто остался с:

 C:UsersAdministratorDesktopcalc.exe
  

Текущий код, который у меня есть:

 #include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
    char s[2048];
    while (fgets(s, sizeof(s), stdin))
    {
        char *pos = strpbrk(s, "|rn");
        if (pos != 0)
            fputs(pos 1, stdout);
    }
    return 0;
}
  

Комментарии:

1. #include <stdio.h> #include <string.h> int main(int argc, char *argv[]) { char s[2048]; while (fgets(s, sizeof(s), stdin)) { char *pos = strpbrk(s, "|rn"); if (pos != 0) fputs(pos 1, stdout); } return 0; }

2. Это текущий код, который у меня есть

3. @pavium Привет, я думаю, что кто-то отредактировал для меня

4. Обязательно ли это делать в C ? домашнее задание?

Ответ №1:

Чтобы опубликованный вами код работал для данного примера, можно внести следующие изменения.

Измените strpbrk вызов, чтобы проверить наличие угловой скобки вместо вертикальной черты (не уверен, была ли это просто опечатка в операционном коде или нет):

   char *pos = strpbrk(s, ">rn");
  

А затем измените if (pos != 0 ) инструкцию на следующую. Это обрезает конец строки в следующей угловой скобке.

   if (pos != 0)
     {
     char *end = strrchr( pos, '<' );
     if ( end )
        *end = '';
     printf("%sn", pos   1);
     }
  

Однако результат довольно хрупкий. Но в зависимости от ввода и желаемого использования, возможно, это нормально.

Комментарии:

1. @Mark Wilkins Привет, только что попробовал, и, похоже, это не работает для нескольких строк, только если в текстовом файле есть только одна строка : (

2. @Den: Я попробовал это только с примером строки из файла, и это сработало. Возможно, ваш файл содержит символы Юникода? Если это так, вам нужно будет использовать fgetws и другие соответствующие функции.

3. Нет, это не так, странно, потому что даже при очень похожих путях к файлам он по-прежнему выводит только один из них: S

4. @Марк Уилкинс, например report2011510222820.html: <td width="60%" bgcolor="#f4f4f4" class="tablebody" valign="top">C:UsersLimitedDesktopdmon_2.exe</td> report2011510222820.html: <td width="60%" bgcolor="#ffffff" class="tablebody" valign="top">C:dmon_2.exe</td>

5. Он выводит только одну из строк, например C:UsersLimitedDesktopdmon_2.exe а не другую (обе находятся в разных строках)