Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Кучка (heap)

Ответить
Настройки темы
C/C++ - Кучка (heap)

Аватара для ManHack

Старожил


Сообщения: 361
Благодарности: 6

Профиль | Отправить PM | Цитировать


Здравствуйте!
Меня интересует как в программе на Си обрабатывать кучу файлов, заданных по маске параметром командной строки как один входной источник? (файлы не копируются друг в друга! в любой момент времени мы должны точно значть из какого именно файла мы считываем)
Синтаксис запуска, например, таков:
myprogram.exe *.TEXT
При таком запуске программа должна обрабатывать в качестве входного потока все файлы с расширением .TEXT, которые лежат в папке с ней.

Товарищи Керниган и Ритчи предлагают только filecopy... ((

Отправлено: 20:51, 13-04-2010

 

Аватара для ManHack

Старожил


Сообщения: 361
Благодарности: 6

Профиль | Отправить PM | Цитировать


Написал совсем по-человечески:
O.C
Код: Выделить весь код
/* Љ®¬ЇЁ«пв®а п§лЄ* Ћ (o.c) */

#define _CRT_SECURE_NO_WARNINGS 

#include <stdlib.h>
#include <stdio.h>
#include <io.h>
#include <time.h>
#include <string.h>

#include "text.h"
#include "scan.h"
#include "scan.h"
#include "location.h"
#include "pars.h"
#include "error.h"

void Init(void) {
	ResetText();
	if( ResetError )
		Error(Message);
	InitScan();
}

void Done(void) {
   CloseText();
}

int main(int argc, char *argv[]) {
   struct _finddata_t c_file;
   intptr_t hFile;

   puts("\n бла-бла-бла");
   if( argc <= 1 )
      Mask = NULL;
   else
      Mask = argv[1];

   hFile = _findfirst( Mask, &c_file );
   if( (hFile = _findfirst( Mask, &c_file )) == -1L ) {
	   printf( "%s", "Файлов, удовлетворяющих маске " );
	   printf( "%s", Mask );
	   printf( "%s", "не найдено.\n" );
   } else {
	   do {
		   strcpy(Path, &c_file.name);
		   Init();    
		   Compile(); 
                           Done();
	   } while( _findnext( hFile, &c_file ) == 0 );
	   _findclose( hFile );
   }

   return 0;
}
Этот самый ResetText():
Код: Выделить весь код
char ResetError = TRUE;
char* Message = "”*©« *Ґ ®вЄалв";
int Ch = chEOT;

static FILE *f;

void NextCh() {
   if( (Ch = fgetc(f)) == EOF )
      Ch = chEOT;
   else if( Ch == '\n' ) {
        //readln(f);// ??
	   // puts("");
      Line++; Pos = 0; Ch = chEOL;
      }
   else if( Ch == '\r' )
      NextCh();
   else if( Ch != '\t' ) {
      //  putchar(Ch); 
	   Pos++;
      }
    // else
       // do
       //    putchar(' ');
      //  while( ++Pos % TABSIZE );
}

void ResetText() {
	if( Path == NULL ) {
		puts("Запуск*:\n   MyProgram.exe <вход. файл>");
		exit(1);
	}
	else if( (f = fopen(Path, "r")) == NULL ){
		ResetError = TRUE;
		Message = "Что-то пошло не так с открытием файла*";
	}
	else {
		ResetError = FALSE; Message = "Ok";
		Pos = 0; Line = 1;
		NextCh();
	}
}

Теперь первый файл по маске программа читает нормально, а вот когда под маску подпадают несколько файлов, то когда дело доходит до второго возникает ошибка:




Ошибка возникает на втором файле, т.к. я пробовал выводить значение переменной Path когда они присваиваются - выдало 1-е имя файла из папки, удовлетворяющее маске и 2-е, потом ошибка.

В чём причина неполадки? Почему программа не хочет обрабатывать последующие файлы? (их имена она определяет правильно)
При компиляции проекта в MS Visual Studio 2008 ошибок не возникало... Помогите.

Отправлено: 20:11, 11-05-2010 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Кучка (heap)

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
heap @ c++ stl pva Программирование и базы данных 10 12-04-2005 15:58




 
Переход