Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.06.2010, 15:56   #1
Призрак286397
Новичок
Джуниор
 
Регистрация: 15.06.2010
Сообщений: 1
По умолчанию Как правильно прочитать фаил(.txt) в командной строке?

И так задание:
Выходной файл представляет собой HTML-документ, с требуемым по заданию табличным представлением данных, либо наличием ссылок на выделяемые фрагменты. Входной файл – обычный текстовый файл, полученный сохранением документа (doc) в тестовый файл (txt) (абзац документа – строка текста). При разработке системы адресации производится ставятся якоря (метки) либо на все абзацы, либо на сами выделенные фрагменты. Необходимая информация сохраняется в динамических структурах данных.
Программа подсчитывает частоты появления слов в тексте, слова считаются одинаковыми при совпадении первых 70% букв (% совпадения можно менять, синтаксис слов не учитывается). Формируется таблица из первых n наиболее часто встречающихся слов, в таблице содержится само слово и ссылки на все абзацы, где оно появляется.
-----------------------------------------------------------------------------------------------------------
а проблема в том что у меня текст не выводиться на русском, подскажите как это сделать!(пищу в Borlande c++)

Так программу я вроде написал:
Код:
#include <stdio.h>
#include <iostream.h>
#include <string.h>
#include <locale.h>
#include <fstream.h>
#include <windows.h>
#include <malloc.h>

struct word {
	char* wd;
	int n, sz;
	int* abz;
void add(char c[],int na){
	wd=strdup(c);
	n=1, sz=10;
	abz = new int[10];
	abz[0]=na;
	}
void add(int na){
	abz[n++]=na;
	if (n!=sz) return;
	sz*=2;
	abz=(int*)realloc(abz,sz*sizeof(int));
	}
void put(){
	printf("%20s %d\n",wd,n);
	}
} *WD;



int n=0, sz;
int kk = 0;

//------- Сотрировка рекурсивным разделением массива
// В качестве медианы - среднее арифметическое
 void sort(word in[], int a, int b){
 int i,j,mode;
 double sr=0;
 if (a>=b) return;						// Размер части =0
 for (i=a; i<=b; i++) sr+=in[i].n;
 sr=sr/(b-a+1);
 for (i=a, j=b; i <= j;)
	{
	if (in[i].n> sr) { i++; continue; }	// Слева - меньше, пропустить
	if (in[j].n<=sr) { j--; continue; }	// Справа - больше, пропустить
	word c = in[i]; in[i] = in[j]; in[j]=c;
	i++,j--;							// Поменять местами и пропустить
	}
 if (i==a) return;						// все равны и в правой части
 sort(in,a,j); sort(in,i,b);}			// рекурсивный вызов для двух частей


int getw(FILE *fd, char c[]){
	int i;
	if (kk == 1) { kk = 0; return 1;}
	while(1){
		c[0] = getc(fd);
		if (feof(fd)) return -1;
		if (c[0] == '\n') return 1;
		if (c[0] != ' ' && c[0] != '\t') break;
	}
	i = 0;
	do{i++; c[i] = getc(fd);}
	while(!feof(fd) && c[i] != '\n' && c[i] !=' ' && c[i] !='\t');
	if (c[i] == '\n') kk = 1;

	c[i] = 0;
	return 0;
	}
void readfilestr(char*name)//чтение текстового файла
{
    printf("Reading text file...\n");
    char*str=new char [81];
    FILE *in;
    if(!(in=fopen(name,"rt")))
    {
        printf("File open is failure...\n");
        return ;
    }
    fscanf(in,"%s",str);
    while(!feof(in))
    {
        printf("%s\n",str);
        fscanf(in,"%s",str);
    }
    fclose(in);
    }
void main()
{
	int MM=100;
	int i;
	setlocale(LC_ALL,"Russian");			// Установка преобразования при выводе
	sz=100;
	n=0;
	WD=new word[sz];
	FILE *fd=fopen("text2.txt","r");
	if (fd==NULL) return;
	char c[1000];
	int na=0;
	int k;
	int nn=0;
	while((k=getw(fd,c))!=-1){
		if (k==1) na++;
		else			// printf("%d %s\n",na,c);
		{
		nn++;
		if (nn%1000==0) printf("%d\n",nn);
		if (strlen(c)<=3) continue;
		for (i=0;i<n && strcmp(c,WD[i].wd);i++);
		if (i==n) {		// Не нашли
			WD[n].add(c,na);
			n++;
			if (n==sz) {sz*=2; WD=(word*)realloc(WD,sz*sizeof(word)); }
			}
		else WD[i].add(na);
		}
	}
	sort(WD,0,n-1);
	 for (i=0;i<n;i++) WD[i].put();
	fclose(fd);
	fd=fopen("text2.txt","r");
	FILE *fdo=fopen("mmm.htm","w");
	fprintf(fdo,"<html><body><table border=1>\n");
	
	for (i=0;i<MM && i<n;i++){
		fprintf(fdo,"<tr><td>%s</td><td>%d</td><td>",WD[i].wd,WD[i].n);
		for (int j=0;j<WD[i].n;j++) fprintf(fdo,"<a href=\"#m%d\">%d</a> ",WD[i].abz[j],WD[i].abz[j]);
		fprintf(fdo,"</td></tr>\n",na);
	}
	fprintf(fdo,"</table>\n");

	na=0;
	fprintf(fdo,"<a name=\"m0\">\n");
	while((k=getw(fd,c))!=-1){
		if (k==1) {
			na++;
			fprintf(fdo,"<br><a name=\"m%d\">\n",na);
			}
		else fprintf(fdo,"%s ",c);
		}
	fprintf(fdo,"</body></html>\n");
	fclose(fd);
	fclose(fdo);
   getchar();
}

Последний раз редактировалось MaTBeu; 15.06.2010 в 16:06.
Призрак286397 вне форума Ответить с цитированием
Старый 15.06.2010, 16:07   #2
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Используйте юникод. Borland C++ его не поддерживает, так что пользуйтесь Visual Studio.
MaTBeu вне форума Ответить с цитированием
Старый 15.06.2010, 17:35   #3
bullvinkle
Временно — юрист.
Форумчанин
 
Аватар для bullvinkle
 
Регистрация: 31.03.2008
Сообщений: 204
По умолчанию

Цитата:
Используйте юникод. Borland C++ его не поддерживает, так что пользуйтесь Visual Studio.
Как это не поддерживает? У меня вся группа использует билдер и все у них нормально. Я не знаю каким образом там все получается, но все они читают умную книжку Рихтера, где есть отдельная глава UNICODE.
http://wm-help.net/books-online/book.../59464-13.html
Билдер не поддерживает юникодовые функции?
bullvinkle вне форума Ответить с цитированием
Старый 15.06.2010, 18:10   #4
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Цитата:
Как это не поддерживает? У меня вся группа использует билдер и все у них нормально.
Я что-то говорил про Билдер?
Не путайте консольный (в DOS-стиле) компилятор и неконсольную среду разработки.
Borland C++ это не Borland C++ Builder
MaTBeu вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кракозябры в командной строке Syltan Общие вопросы по Java, Java SE, Kotlin 5 22.05.2010 14:08
Как указать в командной строке запуска программы имя файла xmaksimca Общие вопросы Delphi 2 27.12.2009 20:43
программа в командной строке Кристина13 Помощь студентам 0 11.06.2009 17:42
Обращение к командной строке yura_$198802 Общие вопросы Delphi 15 09.04.2009 03:37
Xml, как правильно прочитать Parcenson Общие вопросы Delphi 0 02.09.2008 06:29