Чтобы перемотать файл назад в начало (например, для его повторного чтения), вы можете использовать ifstream::seekg()
, чтобы изменить положение курсора и ifstream::clear()
, чтобы сбросить все внутренние флаги ошибок (в противном случае он будет отображаться на конец файла).
Во-вторых, вам может потребоваться прочитать файл только один раз и сохранить то, что вам нужно знать во временном std::deque
или std::list
во время анализа файла. Затем вы можете построить массив (или std::vector
) из временного контейнера, если вам понадобится этот конкретный контейнер позже.
Вы можете использовать это регулярное выражение для сопоставления строки, которую хотите удалить из своего xml,
^\s+<\?xml\s+version="1.0".*\n
Здесь, ^\s+
гарантирует, что первая строка не соответствует той, которую желательно сохранить в строки file и rest, начинающиеся с <?xml version="1.0"
, удаляются, так как остальные из них начинаются с некоторого пробела.
И замените его пустой строкой,
Проверьте этот код Java,
String s = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" + "<User>\n"
+ " <?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" + " <User>\n"
+ " <objectId>c33edcd9-5c13-4ceb-a81a-0a8f44b813ed</objectId>\n" + " </User>\n"
+ " <?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" + " <User>\n"
+ " <objectId>c33edcd9-5c13-4ceb-a81a-0a8f44b813ed</objectId>\n" + " </User>\n"
+ "</User>";
System.out.println("Before: " + s);
System.out.println("After: " + s.replaceAll("\\s+<\\?xml\\s+version=\"1.0\".*", ""));
Это печатает это там, где удаляются строки, которые вы хотели удалить,
Before: <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<User>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<User>
<objectId>c33edcd9-5c13-4ceb-a81a-0a8f44b813ed</objectId>
</User>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<User>
<objectId>c33edcd9-5c13-4ceb-a81a-0a8f44b813ed</objectId>
</User>
</User>
After: <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<User>
<User>
<objectId>c33edcd9-5c13-4ceb-a81a-0a8f44b813ed</objectId>
</User>
<User>
<objectId>c33edcd9-5c13-4ceb-a81a-0a8f44b813ed</objectId>
</User>
</User>
Используйте регулярное выражение из моих примеров кода Java, я немного изменил, чтобы отрегулировать для Java и строки.