Чтение и сохранение файла .txt в С++
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Чтение и сохранение файла .txt в С++ - 2008-04-17 20:00:03.073333
|
|
|
BeoWolf11
Сообщений: 76
Оценки: 0
Присоединился: 2008-01-31 21:09:43.920000
|
Вот я недавно начитл изучать STRING в С++. Но у меня такой вопрос: вот я написал прогу которая читает с файла .txt и делает там изминения… quote:
#include <iostream> #include <fstream> #include <string.h> using namespace std; int main() { fstream fin ("C:/data.txt"); const int LINE_LENGTH = 100; char str[LINE_LENGTH]; string s; while( fin.getline(str,LINE_LENGTH) ) { s = str; s.append (" [Everyone gasps.]"); cout << s << endl; } system("PAUSE"); return 0; } Как видите она читает с файла data.txt каторый находятся в C:/ В этом файле строки: quote:
Fry: One Jillion dollars. Auctioneer: Sir, that's not a number. Так вотб прога добавляет в конец этих строк еще "[Everyone gasps.]". И после этого получяется quote:
Fry: One Jillion dollars. [Everyone gasps.] Auctioneer: Sir, that's not a number. [Everyone gasps.] Но как можно зделать так, чтобы прога сама соханяла готовый результат в том же файле, или может быть в другом .txt
|
|
|
RE: Чтение и сохранение файла .txt в С++ - 2008-04-17 20:09:41.663333
|
|
|
Absurd
Сообщений: 335
Оценки: 0
Присоединился: 2007-08-24 13:14:11.566666
|
system((string("echo ") + s + string(" >>file.txt")).c_str());
|
|
|
RE: Чтение и сохранение файла .txt в С++ - 2008-04-17 20:17:22.093333
|
|
|
BeoWolf11
Сообщений: 76
Оценки: 0
Присоединился: 2008-01-31 21:09:43.920000
|
quote:
system((string("echo ") + s + string(" >>file.txt")).c_str()); В этом случае прога сохраняет только последнию строку "Auctioneer: Sir, that's not a number. [Everyone gasps.] " Но мне нужно весь текст сохванить Как это зделать?
|
|
|
RE: Чтение и сохранение файла .txt в С++ - 2008-04-18 01:11:12.416666
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
1. Читаешь построчно 2. Пишешь во временный файл модифицированную строку 3. Если не конец файла - делаешь п. 1 4. Удаляешь исходный файл 5. Переименовываешь новый Absurd, ты извращенец ;)… +1
|
|
|
RE: Чтение и сохранение файла .txt в С++ - 2008-04-18 08:08:55.930000
|
|
|
BeoWolf11
Сообщений: 76
Оценки: 0
Присоединился: 2008-01-31 21:09:43.920000
|
А методом кода можешь показать :) Просто я не очень понемаю смысл твоих идей…
|
|
|
RE: Чтение и сохранение файла .txt в С++ - 2008-04-18 22:23:04.300000
|
|
|
Genco
Сообщений: 1662
Оценки: 90
Присоединился: 2007-12-16 23:11:22.003333
|
Да просто переписать файл он предлагает,что не понятного.А для этого надо в цикле "while( !feof(f) )" перечитать строчки: считал -изменил - записал.Потом 4,5 пункты. Absurd жжот…))
|
|
|
RE: Чтение и сохранение файла .txt в С++ - 2008-04-19 00:53:12.003333
|
|
|
BeoWolf11
Сообщений: 76
Оценки: 0
Присоединился: 2008-01-31 21:09:43.920000
|
Все, уже все нормально, спосибо… Но я не понимаю прикол с Absurd-ом, ведь все нормально работает…
|
|
|
RE: Чтение и сохранение файла .txt в С++ - 2008-04-19 04:52:37.496666
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Решение Absurd'а платформозависимое. Ты попробуй под досом такое провернуть.
|
|
|
RE: Чтение и сохранение файла .txt в С++ - 2008-04-19 13:29:57.196666
|
|
|
Absurd
Сообщений: 335
Оценки: 0
Присоединился: 2007-08-24 13:14:11.566666
|
quote:
Решение Absurd'а платформозависимое. Ты попробуй под досом такое провернуть. Под Линуксом работает, но там echo чувствительно к апостофу (')
|
|
|
RE: Чтение и сохранение файла .txt в С++ - 2008-04-19 13:44:13.870000
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
quote:
ORIGINAL: _SaZ_ Решение Absurd'а платформозависимое. Ты попробуй под досом такое провернуть. А что, под досом нету функции system?
|
|
|
RE: Чтение и сохранение файла .txt в С++ - 2008-04-19 14:03:47.770000
|
|
|
Absurd
Сообщений: 335
Оценки: 0
Присоединился: 2007-08-24 13:14:11.566666
|
quote:
ORIGINAL: rgo quote:
ORIGINAL: _SaZ_ Решение Absurd'а платформозависимое. Ты попробуй под досом такое провернуть. А что, под досом нету функции system? На самом деле под дос нет компилятора который бы поддерживал современный С++ и в частности std::string.
|
|
|
RE: Чтение и сохранение файла .txt в С++ - 2008-04-19 15:18:38.700000
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
quote:
ORIGINAL: Absurd На самом деле под дос нет компилятора который бы поддерживал современный С++ и в частности std::string. Насчёт "современный C++" – наверное, по-крайней, мере я не знаю (кстати, а OpenWatcom не умеет случаем?). Но std::string есть, скажем в BorlandC++. В версии 3.1 точно был, и был в 5.0, в версии которая тоже, если мне память не изменяет умел делать досовые программы. Собственно я, когда-то давно, читая книжку про C++ и изучая C++, экспериментировал с BorlandC++. Наиболее заметное отклонение от книги, которое было в том C++'е – это неработоспособность try-throw-catch.
|
|
|
RE: Чтение и сохранение файла .txt в С++ - 2008-04-20 00:55:03.733333
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Хех. Не знал про system, т.к. юзал его только в таком контексте - system("cls");
|
|
|
RE: Чтение и сохранение файла .txt в С++ - 2008-04-20 13:04:46.316666
|
|
|
Absurd
Сообщений: 335
Оценки: 0
Присоединился: 2007-08-24 13:14:11.566666
|
quote:
ORIGINAL: rgo quote:
ORIGINAL: Absurd На самом деле под дос нет компилятора который бы поддерживал современный С++ и в частности std::string. Насчёт "современный C++" – наверное, по-крайней, мере я не знаю (кстати, а OpenWatcom не умеет случаем?). По поводу современного С++ под ДОС у меня наименьший скепсис вызывает gcc + djgpp.
|
|
|
RE: Чтение и сохранение файла .txt в С++ - 2008-04-20 16:55:56.520000
|
|
|
BeoWolf11
Сообщений: 76
Оценки: 0
Присоединился: 2008-01-31 21:09:43.920000
|
Вот у меня еще вопрос (задам здесь чтоб новую тему не открывать). Написал я прогу… Вводишь с клавиатуры петь к файлу .txt и слово которое хочешь удалить. Прога должна удалить это слово (или вукву) отовсюду где ее найдет… Допустим у нас есть фаил files.txt с содержанием: macaca
crossbow
chitchat Вот первый вариант: quote:
#include <iostream> #include <fstream> #include <string.h> using namespace std; int main() { string filename; cout << "Give the way to the file\n"; cout << "For ex: C:/data.txt sau C:/data.doc\n"; getline (cin, filename); ifstream fin( filename.c_str() ); if( !fin ) { cout << "Error opening " << filename << endl; system("PAUSE"); exit (-1); } else ifstream fin (filename.c_str()); string s, str; int len, loc; cout << "What words do you wand to delete? " << endl; getline (cin, str); len = str.length(); while(getline(fin,s) ) { loc = s.find(str); if (loc == -1) { cout << "The word " << str << " couldnt be found in the text!" << endl; system("PAUSE"); exit (-1); } else cout << "WAIT…" << endl; loc = s.find (str); s.erase (loc, len); {system((string("echo ") + s + string(" >>data.txt")).c_str());} } system ((string ("gates.txt")).c_str()); return 0; } Допустим вводим путь к файлу и потом букву с (прога должна из всех слов удалить все буквы с) и прога должна сохранить это в файле data.txt который должен содержать: maaa
rossbow
hithat Но в выше показанной проге, результат будет таким:
maaca
rossbow
hitchat Как вы видите, из всех строк, прога удаляет толь первую найденную букву с. И я немного изменил код: quote:
#include <iostream> #include <fstream> #include <string.h> using namespace std; int main() { string filename; cout << "Give the way to the file\n"; cout << "For ex: C:/data.txt sau C:/data.doc\n"; getline (cin, filename); ifstream fin( filename.c_str() ); if( !fin ) { cout << "Error opening " << filename << endl; system("PAUSE"); exit (-1); } else ifstream fin (filename.c_str()); string s, str; int len, loc; cout << "What word do you want to delete? " << endl; getline (cin, str); len = str.length(); while(getline(fin,s) ) { loc = s.find(str); if (loc == -1) { cout << "The word " << str << " couldnt be found in the text!" << endl; system("PAUSE"); exit (-1); } else cout << "WAIT…" << endl; while (loc != -1) { loc = s.find (str); s.erase (loc, len); {system((string("echo ") + s + string(" >>data.txt")).c_str());} }} return 0; } Теперь прога должна удалять все буквы с из всех строк… Но результат получяется таким: maaca
maaa Т.е она удаляет все буквы с только из первой строки фаила, и сохраняет не только финальный результат, но все шаги т.е. если в нашем файле files.txt была бы только строка macaca то во втором случае (измененой проги) результат должен был быть только maaa но сохраняются все шаги… Если в файле files.txt была строка macacamacacamacaca то результат был бы таким: maacamacacamacaca
maaamacacamacaca
maaamaacamacaca
maaamaaamacaca
maaamaaamaaca
maaamaaamaaa Но мне нужна только строка maaamaaamaaa Так вот, что еще нужно изменить чтоб прога удаляля все буквы с (если так вводим) из всех строк, и сохраняла только финальный результат, a не все шаги…
|
|
|
RE: Чтение и сохранение файла .txt в С++ - 2008-04-21 00:37:40.760000
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Нужно немножко подумать головой, и попробовать разные варианты. Начни с разработки чёткого алгоритма, что именно ты хочешь сделать. Не пытайся сразу кодить, от этого будут проблемы.
|
|
|
RE: Чтение и сохранение файла .txt в С++ - 2008-04-21 18:23:04.143333
|
|
|
BeoWolf11
Сообщений: 76
Оценки: 0
Присоединился: 2008-01-31 21:09:43.920000
|
quote:
Нужно немножко подумать головой, и попробовать разные варианты. Начни с разработки чёткого алгоритма, что именно ты хочешь сделать. Не пытайся сразу кодить, от этого будут проблемы. Я уже достаточно подумал и много испробовал, и нашол проблему, только не знаю как ее решить… quote:
ifstream fin ("C:/data.txt"); stirng s; int loc; while (getline(fin,s)) { while (loc != -1) { loc = s.find ("c"); s.erase (loc, 1); ostream outputFile("C:/file.txt"); outputFile << s << endl; } } Функция s.find() ищет тоько в первой строке файла, как зделать так чтоб искал во всех строках?
|
|
|
RE: Чтение и сохранение файла .txt в С++ - 2008-04-22 16:40:42.136666
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
1. Ты не инициализируешь переменную loc. Это есть нехорошо. 2. Попробуй перед ним (2-ым циклом) вставить loc = 0; Получается, что когда в первой строке закончились нужные символы ты читаешь вторую, а переменная loc остаётся равной -1, и во вложенный цикл твоя программа даже не заходит. P.S. А сколько тебе лет? Просто ты очень невнимательный (возможно из-за возраста) или очень упорно не хочешь думать перед тем, чтобы что-то писать и не думаешь в процессе написания. Попробуй читать свою программу и последовательно выполнять (можно на листике ;) то, что ты там написал. На первых порах будет тяжело, но потом привыкнешь. И когда будешь писать большие прогарммы таких ошибок допускать не будешь.
|
|
|
RE: Чтение и сохранение файла .txt в С++ - 2008-04-22 20:05:59.750000
|
|
|
BeoWolf11
Сообщений: 76
Оценки: 0
Присоединился: 2008-01-31 21:09:43.920000
|
quote:
Попробуй перед ним (2-ым циклом) вставить loc = 0; Получается, что когда в первой строке закончились нужные символы ты читаешь вторую, а переменная loc остаётся равной -1, и во вложенный цикл твоя программа даже не заходит. Ты имеешь в виду так? ifstream fin ("C:/files.txt");
string s;
int loc;
while (getline(fin,s))
{
loc = 0;
while (loc != -1)
{
loc = s.find ("c");
s.erase (loc, 1);
fstream outputFile("C:/filesss.txt", fstream::out);
outputFile << s << endl;
}
} Если да, то не выходит… quote:
P.S. А сколько тебе лет? Просто ты очень невнимательный (возможно из-за возраста) или очень упорно не хочешь думать перед тем, чтобы что-то писать и не думаешь в процессе написания. Мне 15. Я просто перегружен, только неделю назад начил изучать string в С++, и слишком много информации сразу… Но я не пытаюсь себя остановить… Тем более я хочу по быстрее изучить язык…
|
|
|
RE: Чтение и сохранение файла .txt в С++ - 2008-04-23 05:13:07.540000
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Советую. Изучи сначала C. Не пытайся сразу юзать STL. И попробуй пошагово прогнать с помощью отладчика. Сразу найдёшь ошибку. P.S. Файл на запись лучше только один раз открывать, а не каждый раз в цикле.
|
|
|
|
|