Работа с файлами

Тема в разделе "C/C++/C#", создана пользователем Dareami, 20 апр 2010.

  1. Dareami

    Dareami Гость

    Подскажите плз как делать вот это задание, кому не тяжело!
    Даны два текстовых файла. Добавить в конец каждой строки первого файла соответствующую строку второго файла. Если второй файл короче первого, то оставшиеся строки первого файла не изменять.
    Хоть что-то)
     
  2. zeus

    zeus Гость

    тут все просто, открываешь два файла для чтения, и создаешь третий на запись, считываешь из каждого фала по строки по-очереди, пока один из них не закончиться... затем закрываешь все три файла и удаляешь первый, а третий переименовываешь в первый =)
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">...</div></div><div class="sp-body"><div class="sp-content">
    Код (C++):
    #include<stdio.h>

    int main(void)
    {
    FILE *f1 = fopen("file1.txt", "r");
    FILE *f2 = fopen("file2.txt", "r");
    FILE *f3 = fopen("temp", "w");

    if (!f1 || !f2 || !f3)
    {
    // ошибка!
    exit(1);
    } // if

    char buf[510];

    while (!feof(f1) && !feof(f2))
    {
    fgets(buf, 255, f1);

    int len = strlen(buf);
    fgets(buf+len, 510-len, f2);

    fputs(buf, f3);
    } // while

    fclose(f2);

    while (!feof(f1))
    {
    fgets(buf, 255, f1);
    fputs(buf, f3);
    } // while

    fclose(f1);
    fclose(f3);

    remove("file1.txt");
    rename("temp", "file1.txt");

    return 0;
    } // main
     
  3. Dareami

    Dareami Гость

    Тут добавляет в начало третьтей строки...((
     
  4. F84

    F84 Гость

    Я бы сделал так:
    Код (C++):
    /////////////////////////////////////////////////
    //Main.cpp
    #include <fstream>
    #include <string>
    #include <iostream>
    using namespace std;

    bool isLimit(char c) {
    char lim[] = {' ', '\t', '\n'};
    for (int i = 0; i < sizeof(lim); ++i)
    if (c == lim[i]) return true;
    return false;
    };


    fstream& readLine(fstream& in, string* s) {
    string word, equal = ".?!";
    while (!in.eof()) {

    char symb;
    while (isLimit(symb = in.peek())) {
    *s += symb;
    if (symb == '\n') break;
    in.seekg(1, ios::cur);
    }

    in >> word;
    *s += word;
    char rn = word[word.size() - 1];
    if (-1 != equal.find(rn)) {
    *s += ' ';
    return in;
    }}
    return in;
    };



    int main() {

    string buf;
    fstream fin("file1.txt", ios::in);
    fstream fin2("file2.txt", ios::in);
    if (!fin || !fin2) { cout << "Error open file." << endl; return 1; };


    do {
    fin = readLine(fin, &buf);
    fin2 = readLine(fin2, &buf);
    }while(!fin.eof() && !fin2.eof());

    fin.close(); fin2.close();

    fstream out("file1.txt", ios::out);
    if (!out) { cout << "Error create output file." << endl; return 1; }
    else { out << buf; out.close(); };

    return 0;
    };
    /////////////////////////////////////////////////
     
  5. Dareami

    Dareami Гость

    Спасибо, но тут мало чего учили..
     
  6. F84

    F84 Гость

    Сори, не заметил ошибку, в функции readLine(fstream& in, string* s) нужно поправить:
    Код (Text):
    .........................
    .........................
    .........................
    if (-1 != equal.find(rn)) {
    *s += ' ';
    return in;
    }}
    return in;
    };
    В пред. посте ошибку поправил, вроде, все работает нормально.
     
  7. F84

    F84 Гость

    Вы бы описали что именно вы подразумеваете под "но тут мало чего учили..", поставленная задача решается приведенным мной кодом. Была ошибка с условием "Если второй файл короче первого, то оставшиеся строки первого файла не изменять.", сейчас она устранена.
     
Загрузка...
Похожие Темы - Работа файлами
  1. gx6060
    Ответов:
    2
    Просмотров:
    419
  2. seoman2
    Ответов:
    21
    Просмотров:
    766
  3. NickProstoNick
    Ответов:
    22
    Просмотров:
    1.522
  4. vladis222
    Ответов:
    3
    Просмотров:
    1.127
  5. Lyuska
    Ответов:
    1
    Просмотров:
    1.171

Поделиться этой страницей