2015-09-08 2 views
-3

Я хочу, чтобы удалить последнюю строку («% 12345») от какого-нибудь текста, который хранится в моем data.txt файлеУдалить последнюю строку из текстового файла с помощью fstream

Может кто-нибудь сказать мне, как я могу добиться того, чего я хочу. Извините, у меня пока нет кода. Если вы дали мне несколько примеров, я действительно ценю это.


data.txt:

Lorem Ipsum просто манекен текста печати и верстки промышленности. Lorem Ipsum был стандартным манекеном в отрасли с 1500-х годов, , когда неизвестный prindfdtersd взял камбуз типа и скремблировал его, чтобы сделать типовой экземпляр . Он пережил не только пять столетий, но и прыжок в электронный набор , оставаясь практически неизменным. Он был популяризирован в 1960-х годах с выпуском Letraset листов Letraset, содержащих проходы Lorem Ipsum, и совсем недавно с настольным издательским программным обеспечением, таким как Aldus PageMaker, включая версии Lorem Ipsum.
% 12345

#include <iostream.h> 
#include <fstream.h> 
main() 
{ 
    char search[500]; 
    ifstream inFile; 
    ofstream outFile; 
    inFile.open("data.txt"); 

    while(!inFile.eof()) 
    { 
      inFile.getline(search,500); 
      outFile.open("data.txt"); 
      outFile.seekp(0,ios::end); //Seek to the end of text file 
      //I don't know what to do here to delete last line????    
      outFile.close(); 
    } 
    inFile.close(); 
    return 0; 
} 
+1

Пытались ли вы что-нибудь? Если у вас есть, отправьте этот код и объясните, с чем вы столкнулись. –

+0

Вы должны показать нам, что вы сделали. Существуют различные способы сделать это, некоторые наивные (работает только для последней строки) и некоторые изящные (удалите последние строки 'n' файла). – PaulMcKenzie

+0

Я добавил код проблемы, пожалуйста, друзья мне помогают !!! –

ответ

0

Если вы хотите, чтобы код был 100% портативный, все, что вы можете сделать, это прочитать весь текст, а затем скопировать его строка за строкой, оставляя последнюю строку. Если реальный файл не меньше, чем пример в вопросе, вы можете просто пойти с этим.

Если файл большой и вам не нужна абсолютная переносимость, вы можете легко найти точку с чем-то вроде 4 килобайта с конца и начать читать оттуда. Когда вы выясните, где начинается последняя строка, используйте метод, специфичный для платформы, для обрезания файла на эту точку (SetEndOfFile в Windows, поиск нужной точки и запись нулевой длины в UNIX и т. Д.)

Что касается кода, который у вас есть, по крайней мере, если вы пытаетесь сделать это с помощью довольно современного компилятора C++, вам, вероятно, придется выбросить этот код и начать все заново. Я знаю, что это звучит сурово, и мне очень жаль, но в этом случае это правда. Начнем с заголовков: <iostream.h> и <fstream.h> были устаревшими с середины 1990-х или около того, пару десятилетий назад. Большинство современных компиляторов полностью отклонят код на этой основе.

Оттуда ваш код для чтения данных является смертельно ошибочным почти во всех отношениях. Форма std::getline, которую вы используете, по-прежнему технически включена в C++, но это было хорошее десятилетие, так как оно использовалось достаточно часто, чтобы заметить. Вы почти всегда хотите, чтобы форма принимала параметр std::string. Ваше состояние цикла (while(!inFile.eof())) также полностью сломано - это в значительной степени не может работать правильно.

касается того, как я это сделать, я бы, вероятно, сделать что-то на этом общем порядке:

read a line into `prev_line` 
while (read a line into `current_line`) { 
    write out prev_line 
    prev_line = current_line 
} 
+0

Я добавил код проблемы, пожалуйста, помогите мне !!!! –

Смежные вопросы