Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.70/10: Рейтинг темы: голосов - 10, средняя оценка - 4.70
vladko
0 / 0 / 0
Регистрация: 31.03.2009
Сообщений: 44
#1

Обработка текстового файла

31.03.2009, 11:44. Просмотров 1829. Ответов 11
Метки нет (Все метки)

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

1.3446 11
1.325 876
1.3567 32
...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <stdio.h>
#include <map>
using namespace std;
 
typedef map<double, int> Map;
 
extern "C"
{
void __stdcall proc1(const char* fileName)
{
    FILE* f = fopen(fileName, "r");
    if(!f)
    {
        printf("file not found\n");
        return;
    }
    Map m;
    for(;;)
    {
        double a;
        int b;
        if(fscanf(f, "%lf %d", &a, &b) < 2)
            break;
        pair<Map::iterator, bool> result = m.insert(pair<double, int>(a, b));
        if(!result.second)
            (result.first)->second += b;
    }
    fclose(f);
 
    char outFileName[264];
    strcpy(outFileName, fileName);
    strcat(outFileName, ".out");
 
    f = fopen(outFileName, "w");
    for(Map::iterator it = m.begin(); it != m.end(); ++it)
        fprintf(f, "%f %d\n", it->first, it->second);
    fclose(f);
}
}
Формат текстового файла изменился:

20090320 010013;1.3666;1
20090320 010017;1.3667;1
20090320 010017;1.3668;2
20090320 010021;1.3666;1
20090320 010027;1.3667;1
20090320 010057;1.3667;1
Как изменить функцию и добавить вычисления не по всему файлу а по куску ограниченному датой и временем (1 и 2 поля)?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.03.2009, 11:44
Ответы с готовыми решениями:

Обработка текстового файла
Доброго времени суток. Вопрос: как происходит обработка данного текстового...

Обработка информации из текстового файла
Дан файл формата Р1, Р2, …, Р10 – объемы поставок; x1, x2, …, x20 –...

Посимвольная обработка текстового файла: распределение всех слов по длине
Вывести в файле распределение всех слов по длине (т.е. сколько в файле слов из...

Добавить в конец первого текстового файла содержимое второго текстового файла
Даны два текстовых файла. Добавить в конец первого файла содержимое второго...

Чтение текстового документа, обработка, запись нового
Задача: есть текстовый документ типа: 36745 375294567456 80293455906 ... ...

11
accept
4833 / 3255 / 454
Регистрация: 10.12.2008
Сообщений: 10,569
31.03.2009, 11:59 #2
C++
1
2
3
4
5
        double a;
        int b;
        
        if(fscanf(f, "%lf %d", &a, &b) < 2)
            break;
C++
1
2
3
4
5
6
        char date[9], somth[7];     
        double a;
        int b;
        
        if(fscanf(f, "%8s%6s%lf %d", date, somth, &a, &b) < 4)
            break;
добавляет считывание полей, неясно нужны предыдущие поля или нет
0
vladko
0 / 0 / 0
Регистрация: 31.03.2009
Сообщений: 44
31.03.2009, 12:30  [ТС] #3
Я так понял, что этот кусок позволяет просто обрабатывать новый файл... Спасибо. А как насчет обработки куска файла ограниченного датой и времени?
0
accept
4833 / 3255 / 454
Регистрация: 10.12.2008
Сообщений: 10,569
31.03.2009, 13:24 #4
она подготавливает новый формат для обработки (разделяет на отдельные фрагменты)
0
vladko
0 / 0 / 0
Регистрация: 31.03.2009
Сообщений: 44
31.03.2009, 13:30  [ТС] #5
Это я понял.
Теперь как изменить строчку
Код
void __stdcall proc1(const char* fileName)
чтобы передать функции аргументы с которыми будут сравниваться date и somth? И как вообще их правильно сравнить?
0
accept
4833 / 3255 / 454
Регистрация: 10.12.2008
Сообщений: 10,569
31.03.2009, 13:46 #6
так как это строки, то применяется strcmp(date, patt);

можно создать структуру, записать в неё образцы и для date и для somth, потом передать указатель на неё в функцию и сверять date с образцом для date, somth с образцом для somth

C++
1
2
    if (strcmp(date, s->date_patt) == 0)
        printf("%s: equal\n", date);
0
vladko
0 / 0 / 0
Регистрация: 31.03.2009
Сообщений: 44
31.03.2009, 14:50  [ТС] #7
Попробовал без структур
C++
1
2
3
int __stdcall proc1(const char* fileName, const char* datebeg, const char* timebeg,const char* dateend, const char* timeend)
...
if ( strcmp(date, datebeg) >= 0 && strcmp(time, timebeg) >= 0 && strcmp(date, dateend) <= 0 && strcmp(time, timeend) <= 0 )
условие никогда не выполняется. В чем ошибка?
0
accept
4833 / 3255 / 454
Регистрация: 10.12.2008
Сообщений: 10,569
31.03.2009, 16:16 #8
например date datebeg dateend какие ?
0
vladko
0 / 0 / 0
Регистрация: 31.03.2009
Сообщений: 44
31.03.2009, 16:48  [ТС] #9
когда date=datebeg=dateend
0
accept
4833 / 3255 / 454
Регистрация: 10.12.2008
Сообщений: 10,569
31.03.2009, 17:06 #10
какие строки там ?

Код
date=datebeg=dateend
Код
    if (strcmp(date, datebeg) == 0 && strcmp(datebeg, dateend) == 0)
        ;
0
vladko
0 / 0 / 0
Регистрация: 31.03.2009
Сообщений: 44
31.03.2009, 17:50  [ТС] #11
Не понял...
Допустим файл такой:
20090325 000011;7610;1
20090325 000137;7610;1
20090325 000137;7609;1
20090325 000139;7610;1
20090325 000140;7610;1
20090325 000140;7610;1
20090325 000142;7610;6
20090325 000142;7611;1
20090325 000202;7615;1
20090325 000439;7611;1
20090325 000447;7614;1
20090325 000516;7611;1
20090325 000522;7613;1
20090325 000522;7613;4
Нужно взять кусок времени от 000100 до 000500
В функцию передаю такие аргументы:
datebeg="20090325" dateend="20090325"
timebeg="000100" timeend="000500"
date получается всегда равно "20090325"
0
accept
4833 / 3255 / 454
Регистрация: 10.12.2008
Сообщений: 10,569
31.03.2009, 18:23 #12
выводит строки диапазона
0
Вложения
Тип файла: zip str_diap.zip (504 байт, 19 просмотров)
31.03.2009, 18:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.03.2009, 18:23

Преобразование текстового файла в двоичный и чтение исходных данных из двоичного файла.
#include&lt;iostream&gt; #include&lt;fstream&gt; #include&lt;locale.h&gt; #include&lt;iomanip&gt;...

Сортировка слов текстового файла путём слияния данных из файла и заданного внутреннего массива
Здравствуйте. Имеется задание, которое я ни в коем случае не прошу за меня...

Указание текстового файла-источника и принимающего файла в cmd
Подскажите, как сделать что б при вводе через cmd надо было указывать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru