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

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

  1. Dareami

    Dareami Гость

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

    zeus Гость

    Репутация:
    0
    тут все просто, открываешь два файла для чтения, и создаешь третий на запись, считываешь из каждого фала по строки по-очереди, пока один из них не закончиться... затем закрываешь все три файла и удаляешь первый, а третий переименовываешь в первый =)
    <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 Гость

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

    F84 Гость

    Репутация:
    0
    Я бы сделал так:
    Код (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 Гость

    Репутация:
    0
    Спасибо, но тут мало чего учили..
     
  6. F84

    F84 Гость

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

    F84 Гость

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

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