#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 а не другую (обе находятся в разных строках)