Форум: Форум C++Разное
Новые темы: 00
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Чересстрочное слияние двух файлов в один
 
 автор: kandrey58reg   (01.10.2009 в 15:10)   письмо автору
 
 

Задание:
Написать программу на языке C++ чересстрочного слияния (т.е. первая строка в выходном файле - это первая строка из первого файла, вторая строка в выходном файле - это первая строка из второго файла, третья строка в выходном файле - вторая строка из первого файла и т.д.) двух текстовых файлов с удалением в каждой строке слов после которых стоит любой знак препинания.

Вот попытался сделать первую процедуру, которая сливает информацию из двух файлов один
Подскажите пожалуйста, все ли здесь правильно

class gaz{
public:
void WriteFile()
{
FILE *fi_1,*fi_2,*fo;
 clrscr();
 if ((fi_1=fopen("D:\\file_1.txt""r"))==0){
  cout << "Error open input file!!!" ;
  return;}
 if ((fi_2=fopen("D:\\file_2.txt""r"))==0){
  cout << "Error open input file!!!" ;
  return;}
 if ((fo=fopen("D:\\out.dat","w+b"))==0){
  cout << "Error open output file!!!";
  return;}
  int v=m*2;
slifile = new char*[m+1];
for(int i=0; i<m+1; i++){
slifile[i] = new char[m+1];
}
int i, max, j, l;
cout << "w\n";
for (int i = 1; i <(n1+1); i++) {
  cout<<mass1[i];
  cout<<"\n";}
for (int j = 1; j < (n2+1); j++){
 cout<<mass2[j];
 cout<<"\n";
}
cout << "ssdfrt";
int cnt1 = n1;
int cnt2 = n2;
cout << endl << cnt1 << endl;
cout << cnt2 << endl;
stroka cnt;
max = (cnt1 > cnt2) ? cnt1 : cnt2;
slifile = new char*[cnt1 + cnt2];
cout << "sdfwerewr\n";
itoa(max*2,cnt,10);
strcpy(slifile[0], cnt);
cout << "\n max=" << max << "\n";
if (cnt1 == cnt2) {
cout << "* Fails odinakovoy dlini\n\n";
for (int i = max, j = 1; i > 0; i--, j += 2) {
if (i % 2 == 0) {
else {
 strcpy(slifile[j],mass1[i]);
 strcpy(slifile[j+1],mass2[i]);
}
}
else {
if (cnt1 < cnt2) {
cout << "* fi_1 < fi_2\n\n";
 int i,l,j;
for (i = max,l = 1, j = 1; i > 0; i--, l++, j += 2) {
cout << "d1";
if (l > cnt2) {
strcpy(slifile[j], EMPTY_STR);
cout << "d2";
else {
 strcpy(slifile[j],mass1[i]);
cout<<"d3";
}
cout<<"d4";
strcpy(slifile[j + 1], mass1[i]);
cout<<"";
}
else {
cout << "* fi_1 > fi_2\n\n";
for (int i = max ,l = 1,j = 1; i > 0; i--, l++, j += 2) {
strcpy(slifile[j],mass2[i]);
if (l > cnt1)
strcpy(slifile[j + 1], EMPTY_STR);
else
  strcpy(slifile[j+1],mass1[l]);
}
}
}
fclose(fi_1);
fclose(fi_2);
fclose(fo);
return;
}

  Ответить  
 
 автор: cheops   (01.10.2009 в 15:32)   письмо автору
 
   для: kandrey58reg   (01.10.2009 в 15:10)
 

Сразу что видно на первый взгляд - у вас много new и ни одного delete - в принципе если программа работает не долго и с небольшими объёмами - ничего страшного, а вообще - это утечка памяти и считается ошибкой.

  Ответить  
 
 автор: Trianon...   (02.10.2009 в 17:35)
 
   для: kandrey58reg   (01.10.2009 в 15:10)
 

FILE *f[2]; int eof[2], c;
if((f[0] = fopen('file1.txt''r')) == NULL) exit();
if((f[1] = fopen('file2.txt''r')) == NULL) exit();
if((fo = fopen('file_out.txt''w')) == NULL) exit();
eof[0] = eof[1] = 0;
for(i = 0; !(eof[0] & eof[1]);  i ^= 1)
   if(!eof[i]))
      do 
      {
        if((с = getc(f[i])) < 0)
        {
          eof[i] = 1;
          break;
        }
        putc(c, fo);
      } while(c != '\n');

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования