IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Работа с файлом
сообщение
Сообщение #1


студент..
***

Группа: Пользователи
Сообщений: 287
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  2  +


Здравствуйте. Подскажите как сделать? Читает текстовый файл, в котором написана таблица, строки соответствуют строкам , столбцы разделены (разделителем-запятая), если значение цифра (целое или дробное), то она оставляется, если значение слово, то записывает его в массив и вместо слова ставит номер значения из этого массива. Для каждого столбца свой массив.
Начал реализовывать, но столкнулся с проблемой как считать слово и заменить его на номер в другом массиве, а в другой его записать.

#include <stdio.h>
#include <afx.h>
#include <conio.h>
#include <ctype.h>
#include <tchar.h>

FILE *fi,*fo;
int nline=0;
int count=0;
PSTR gpPos;

void main(){
char fname[]="test2.txt";
char fname2[]="output.txt";
// printf("\nVvedite imja fhodnogo faila: ");
// scanf("%s",&fname);

if((fi=fopen(fname,"r"))==NULL)
{
printf("\nOshibka otkrytija vhodnogo faila!");
getch();
exit(0);
}
if((fo=fopen(fname,"w"))==NULL)
{
printf("\nOshibka otkrytija vhodnogo faila!");
getch();
exit(0);
}

char c;
int elem[119];
while(!feof(fi))
{
c=fgetc(fi);
count++;
if ((c=='\n')||(c==EOF))
{
nline++;
elem[nline]=count;
count=0;
}
}

char line[120]="";
char *result;
fseek (fi, 0L, SEEK_SET);
int k=0;
while (!feof(fi))
{
result=fgets(line,elem[k],fi);
gpPos=(PSTR)result;
int n=sizeof(gpPos);
for(;;)
{ gpPos++;
int j=0;
char m[20];
if isalpha(gpPos)
{
for(;;){
gpPos++;
if (gpPos==',')
break;
}
m[j]=(char)gpPos;
gpPos=PSTR(j);
}
fputc(m[j],fo);
}
k++;
}
fclose(fi);
fclose(fo);
}

Пример входного файлаПрикрепленный файл  1.txt ( 17.67 килобайт ) Кол-во скачиваний: 455


Сообщение отредактировано: Clerick -


--------------------
После дождя обязательно выглянет солнце)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Зачем ты работаешь посимвольно?

Я бы читал строку полностью из файла тем же fgets-ом, потом разбивал бы ее на токены с помощью strtok (у тебя ж разделяются все элементы запятой? Вот и разбивай по запятым). Получил очередной токен - попробовал перевести его в вещественное число. Не получилось - значит строка, делаешь со строкой то, что тебе надо, записываешь в массив (или сначала ищешь, может эта строка уже в массиве есть), а в другой массив пишешь индекс...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


студент..
***

Группа: Пользователи
Сообщений: 287
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  2  +


А что имеется в виду под перевести в вещественное число?


--------------------
После дождя обязательно выглянет солнце)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






    double f;
char *s = "http";
if(sscanf(s, "%lf", &f) == 0)
{
printf("Error\n");
}
else
{
printf("%8.4lf\n", f);
}

В случае "http" функция sscanf вернет 0, и ты понимаешь, что там ошибка, значит - была строка. Если в s записать, скажем, "123.434", то это число корректно прочитается и выполнение пойдет по другой ветке...
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 2.05.2024 9:56
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name