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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 12.08.2009, 16:34   #1
New_One
 
Регистрация: 12.08.2009
Сообщений: 5
Вопрос Массив и строки

Приветствую всех. Есть код на С
Помогите разобраться пожалуйста: Выборка данных из File
Код:
#include <stdio.h>

int main()
{
    char buf[80];
    int c=0;
    FILE *in;
    in=fopen("File.txt","rb");
    
       while(fgets(buf,80,in)!=NULL){
       
        fprint(stderr,"%s",buf);
        c++;
    }
    fclose(in);
    system("pause");
    return 0;
}
Как данные из "File" поместить сначала в массив (тип int) и затем уже fprint но с пятой строки файла и с элемента ',' до '\0' в строке.

Заранее спасибо!!!
New_One вне форума
Старый 12.08.2009, 16:52   #2
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Формат файла приведите
psycho-coder вне форума
Старый 13.08.2009, 16:09   #3
New_One
 
Регистрация: 12.08.2009
Сообщений: 5
По умолчанию

Вот файл:
___________________________________
;ђ*бзҐв*л© ЇҐаЁ®¤: 01.08.2009-06.08.2009
;ђ*§¤Ґ«Ґ*Ёп ** ¤*Ґў*®Ґ Ё ўҐзҐа*ҐҐ ўаҐ¬п *Ґв
;ђҐ¦Ё¬ ®ЄагЈ«Ґ*Ёп: ЎҐ§ ®ЄагЈ«Ґ*Ёп
;”®а¬*в бва®ЄЁ: *®¬Ґа,ўаҐ¬п ®Ўй. (ᥪг*¤л)
*Ќ®¬Ґа,00:00
*@@@@@@@,0
1111111,456
1111111,0
1111111,34
1111111,23234
....................
1111111,n
___________________________________ ___
Я хотел получить сумму элементов 456+0+34+23234+...+n ,
n <=12000
New_One вне форума
Старый 13.08.2009, 16:37   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от New_One
Как данные из "File" поместить сначала в массив (тип int) и затем уже fprint но с пятой строки файла и с элемента ',' до '\0' в строке.
Вот это не понял. Поэтому ориентировался по этой фразе:
Цитата:
Сообщение от New_One
Я хотел получить сумму элементов 456+0+34+23234+...+n ,
n <=12000
Файл:
Код HTML:
;ђ*бзҐв*л© ЇҐаЁ®¤: 01.08.2009-06.08.2009
;ђ*§¤Ґ«Ґ*Ёп ** ¤*Ґў*®Ґ Ё ўҐзҐа*ҐҐ ўаҐ¬п *Ґв
;ђҐ¦Ё¬ ®ЄагЈ«Ґ*Ёп: ЎҐ§ ®ЄагЈ«Ґ*Ёп
;”®а¬*в бва®ЄЁ: *®¬Ґа,ўаҐ¬п ®Ўй. (ᥪг*¤л)
*Ќ®¬Ґа,00:00
*@@@@@@@,0 
1111111,456
1111111,0
1111111,34
1111111,232
1111111,54
1111111,76
Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char buf[80],*p;
    int c=0;
    long Summ=0;
    FILE *in;
    in=fopen("test.txt","rb");

       while(fgets(buf,80,in)!=NULL && c<5){
        fprintf(stdout,"%s",buf);
        c++;
    }
    while(fgets(buf,80,in)!=NULL)
     {
      p = strchr(buf,',');
      Summ += atoi((p+1));
     }
    printf("Summ = %ld\n",Summ);

    fclose(in);
    system("pause");
    return 0;
}
Оно?
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума
Старый 13.08.2009, 22:17   #5
New_One
 
Регистрация: 12.08.2009
Сообщений: 5
По умолчанию

Скомпилил но чтото не работает
А вот на С++ удалось решить но без массива
правда не без добрых людей
Код:
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
using namespace std;

int main() {
  string in_file = "file.txt"; // входной файл
  ifstream in;
  in.open(in_file.c_str());
  string line;
  long int sum = 0, n = 0; // сумма и номер строки
  while(getline(in, line)) {
    ++n;
    if(n > 6) // считаем сумму начиная с 7-й строки
      sum += atol((line.substr(line.find(",") + 1)).c_str());
  }
  in.close();
  cout << "The sum is: " << sum << "\t" << n-6 << endl;

    system("pause");
    return 0;
}
New_One вне форума
Старый 13.08.2009, 22:44   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от New_One
Скомпилил но чтото не работает
А что именно не работает?
Результаты совпадают.

И куда вы там хотите массив прикрутить? Просто загнать в него слагаемые?
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума
Старый 14.08.2009, 00:55   #7
New_One
 
Регистрация: 12.08.2009
Сообщений: 5
По умолчанию

Да я сначала хотел строки из файла в массив загнать а потом выделить элементы и подсчитать их сумму но получилось проще с вышеприведенным вариантом. Теперь 2-я проблема: Есть папка с этими файлами, я создаю result.txt , который
Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
#include <errno.h>
 
void fcn(FILE *ifp, FILE *ofp, char *ifname)
{
        char buf[1024];
        long nlines = 0;
 
        while(fgets(buf, sizeof(buf), ifp) != NULL)
                nlines++;
        fprintf(ofp, "%s:\n", ifname);
}
 
main()
{
        const char *ofname = "result.txt";
        FILE *ifp, *ofp;
        DIR *dp;
        struct dirent *dirl;
 
        if( (ofp = fopen(ofname, "w")) == NULL) {
                printf("fopen: %s: %s\n", ofname, strerror(errno));
                return EXIT_FAILURE;
        }
        if( (dp = opendir(".")) == NULL) {
                printf("opendir: %s: %s\n", ".", strerror(errno));
                return EXIT_FAILURE;
        }
        while( (dirl = readdir(dp)) != NULL) {
                if(strcmp(dirl->d_name, ofname) == 0)
                        continue;
                if(strstr(dirl->d_name, ".TXT") != NULL) {
                        if( (ifp = fopen(dirl->d_name, "r")) == NULL) {
                                printf("fopen: %s: %s\n", dirl->d_name, strerror(errno));
                                continue;
                        }
                        fcn(ifp, ofp, dirl->d_name);
                        fclose(ifp);
                }
        }
        fclose(ofp);
        system("pause");
        return EXIT_SUCCESS;
}
содержит имена файлов в папке
Не могу два кода соединить чтобы получить result.txt типа
________________________________
имя_файла : кол-во строк : сумма
................................... ...............
Уже совсем запутался то С то ++ Просто знаний не хватает
New_One вне форума
Старый 14.08.2009, 01:18   #8
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Что-то вроде этого?

Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
#include <errno.h>

void fcn(FILE *ifp, FILE *ofp, char *ifname)
{
        char buf[1024];
        FILE *in;
        char *p;
        int c=0,n=0;
        long Summ=0;

        in = fopen(ifname,"r");
        while(fgets(buf,80,in)!=NULL && c<5) c++;
        while(fgets(buf,80,in)!=NULL)
        {
         p = strchr(buf,',');
         Summ += atoi((p+1));
         n++;
        }
        fclose(in);

        fprintf(ofp, "%s: %d : %d\n", ifname,n,Summ);
}

int main()
{
        const char *ofname = "result.txt";
        FILE *ifp, *ofp;
        DIR *dp;
        struct dirent *dirl;

        if( (ofp = fopen(ofname, "w")) == NULL)
        {
                printf("fopen: %s: %s\n", ofname, strerror(errno));
                return EXIT_FAILURE;
        }

        if( (dp = opendir(".")) == NULL)
        {
                printf("opendir: %s: %s\n", ".", strerror(errno));
                return EXIT_FAILURE;
        }
        while( (dirl = readdir(dp)) != NULL)
        {
                if(strcmp(dirl->d_name, ofname) == 0)
                        continue;

                if(strstr(dirl->d_name, ".txt") != NULL)
                {
                        if( (ifp = fopen(dirl->d_name, "r")) == NULL)
                        {
                                printf("fopen: %s: %s\n", dirl->d_name, strerror(errno));
                                continue;
                        }

                        fcn(ifp, ofp, dirl->d_name);
                        fclose(ifp);
                }
        }
        fclose(ofp);
        system("pause");
        return EXIT_SUCCESS;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума
Старый 14.08.2009, 12:50   #9
New_One
 
Регистрация: 12.08.2009
Сообщений: 5
По умолчанию

Спасибо огромное Sazary !!! Именно это я и хотел получить
New_One вне форума
Закрытая тема


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенести символа с начала строки в место перед запятой этой же строки. Zhiltsov Microsoft Office Excel 4 05.06.2009 13:10
Сформировать массив (строки) felmor Паскаль, Turbo Pascal, PascalABC.NET 1 25.12.2008 20:10
Упорядочить массив в порядке возрастания и напечатать входной и исходный массив. TheVenny Помощь студентам 3 26.11.2008 15:06
3 задачки на Паскаль. Массив,строки. помогите решить до завтра! meds Паскаль, Turbo Pascal, PascalABC.NET 2 29.05.2008 08:29
считать из файла две строки, вывести на экран символы первой строки, которые отсутствуют во второй gotex Помощь студентам 4 08.05.2008 02:27