Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 5.00
СпиК
Сообщений: n/a
#1

Дописать фаил - C++

06.09.2007, 17:39. Просмотров 1285. Ответов 3
Метки нет (Все метки)

Помогите новичку.
Есть фаил:
FK|2005.08|СЭД|1.21.X.13||
FROM|5600с**а21.03.2007|1|
TO|||14650||
RR||188||9500||А.П. Щербина|Н.В. Котов|Начальник отделения|Гончарова С.В.|0|
RRRC|188/14650/011|20.03.2007|20.03.2007|0|0||1|14650||5600х..во218278105000|215290000|70982585000|15290000|224539855000|72823405000|||0|10484|
RRRCST|188|0302|2010000|222|222|50000000|50000000|0|0||1|
RRRCST|188|0302|2020000|253|226|3877355000|150000000|0|0||2|
RRRCST|188|0302|2020000|253|290|111400000|14000000|0|0||3|
RRRCST|188|0302|2150000|240|262|1290000|1290000|0|0||4|
RRRCST|188|0302с**а218278105000|215290000|70982585000|15290000||5|
Надо вставить в начало конец строки, которая начинается на RRRC и в конец файла тест.
Вот исходник
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
40
41
42
43
44
45
46
47
48
49
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void main (int argc, char *argv[])
{
   FILE *in, *out;
   char buf[1024];
   char buf2[1024];
   char *ptr;
   int cnt=0;
   if (argc>2) {
   if ((in = fopen(argv[1], "r"))
       == NULL)
   {
      fprintf(stderr, "       Cannot open input file.\n");
      exit(1);
   }
   if ((out = fopen(argv[2], "w"))
       == NULL)
   {
      fprintf(stderr, "       _Cannot open input file.\n");
       exit(1);
   }
   while (!feof(in)){
   fgets(buf,1024,in);
   if (cnt==0) {
   strcpy(buf2,buf);
   ptr=&buf2[11];
   strcpy(buf,"FK|2006.01|");
   strcat(buf,ptr);
 
   }
   cnt++;
   
   if (strncmp("RRRC|",buf,5)==0)
   {
    buf[strlen(buf)-1]='|';
    buf[strlen(buf)]='|';
    fprintf(out,"%s\n",buf) ;
    
   }
   else
   fputs(buf,out);
   }
    fputs("REORG||||||",out);
    fclose(out);
    fclose(in);  
   }
}
И почему-то получается вот так:
Код
FK|2006.01|СЭД|1.21.X.13||
FROM|5600с**а21.03.2007|1|
TO|||14650||
RR||188||9500||А.П. Щербина|Н.В. Котов|Начальник отделения|Гончарова С.В.|0|
RRRC|188/14650/011|20.03.2007|20.03.2007|0|0||1|14650||5600х..во218278105000|215290000|70982585000|15290000|224539855000|72823405000|||0|10484|||МММММММММММММММММММММММММММММММММММММММММ°JB
RRRCST|188|0302|2010000|222|222|50000000|50000000|0|0||1|
RRRCST|188|0302|2020000|253|226|3877355000|150000000|0|0||2|
RRRCST|188|0302|2020000|253|290|111400000|14000000|0|0||3|
RRRCST|188|0302|2150000|240|262|1290000|1290000|0|0||4|
RRRCST|188|0302с**а218278105000|215290000|70982585000|15290000||5|
RRRCST|188|0302с**а218278105000|215290000|70982585000|15290000||5|
REORG||||||
Помогите плиз!!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2007, 17:39     Дописать фаил
Посмотрите здесь:

текстовый фаил C++
C++ Запись в фаил
C++ Ввод вывод в фаил
не находит фаил C++
C++ неправильно передается фаил
фаил в функцию C++
матрица, и вывод из\в фаил C++
не открывается фаил C++
Двоичный фаил C++
Удалить и переименовать фаил C++
Запись в фаил C++
C++ Сохранение в фаил

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igor_nf
118 / 12 / 1
Регистрация: 21.08.2007
Сообщений: 222
06.09.2007, 18:18     Дописать фаил #2
Цитата Сообщение от СпиК
Надо вставить в начало конец строки, которая начинается на RRRC и в конец файла тест.
Не понятно. Нарисуй, как должен файл выглядеть в конечном итоге...
СпиК
Сообщений: n/a
06.09.2007, 18:54     Дописать фаил #3
Без МММММММММММММММММММ, т.е.так
FK|2006.01|СЭД|1.21.X.13||
FROM|5600с**а21.03.2007|1|
TO|||14650||
RR||188||9500||А.П. Щербина|Н.В. Котов|Начальник отделения|Гончарова С.В.|0|
RRRC|188/14650/011|20.03.2007|20.03.2007|0|0||1|14650||5600х..во218278105000|215290000|70982585000|15290000|224539855000|72823405000|||0|10484|||
RRRCST|188|0302|2010000|222|222|50000000|50000000|0|0||1|
RRRCST|188|0302|2020000|253|226|3877355000|150000000|0|0||2|
RRRCST|188|0302|2020000|253|290|111400000|14000000|0|0||3|
RRRCST|188|0302|2150000|240|262|1290000|1290000|0|0||4|
RRRCST|188|0302с**а218278105000|215290000|70982585000|15290000||5|
RRRCST|188|0302с**а218278105000|215290000|70982585000|15290000||5|
REORG||||||
igor_nf
118 / 12 / 1
Регистрация: 21.08.2007
Сообщений: 222
06.09.2007, 22:58     Дописать фаил #4
Честно сказать, оформление кода ужасное, да и нет желания глубоко копать, потому что задача мне так и не ясна. Я, обычно, стараюсь свести пользование библиотечными функциями до минимума. Почему у вас там лишние буквы печатаются, это вы уж сами как-нибудь разберитесь. То, что вам нужно, исходя из требуемого вида файла, решает следующий код:
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <stdlib.h>
#include <stdio.h>
 
#define BUFSIZE 1024
 
void get_file_data( char* );
void change_date( char* );
void cat_to_end( char* );
 
char buf[BUFSIZE];
FILE *in, *out;
 
int main(int argc, char *argv[])    {
 
    char *ptr;
 
    if( argc != 3) {
        fprintf( stderr, "\tWrong args...Exiting...\n");
        exit( EXIT_FAILURE );
    }
 
    if ( (in = fopen( argv[1], "r" )) == NULL ) {
        fprintf( stderr, "\tCannot open input file...Exiting...\n" );
        exit( EXIT_FAILURE );
    }
 
    if ( (out = fopen( argv[2], "w" )) == NULL ) {
        fprintf(stderr, "\tCannot open input file....Exiting...\n");
        exit( EXIT_FAILURE );
    }
 
    get_file_data( buf );
    change_date( buf );
    cat_to_end( buf );
    
    int i;
 
    for( i = 0; buf[i] != EOF && i < sizeof( buf ) / sizeof( buf[0] ); ++i )
        putc( buf[i], out );
    
    fclose( in );
    fclose( out );
 
return 0;
}
 
void get_file_data( char *ptr ) {
 
    int i;
    char ch;
 
    for( i = 0; (ch = getc( in )) != EOF && i < BUFSIZE; ++i )
        *( ptr + i ) = ch;
 
    *( ptr + i ) = ch;
}
 
void change_date( char* ptr ) {
 
    int i;
 
    char *Data = "2006.01";
 
    for( i = 3; *Data != '\0'; ++i, ++Data )
        *(ptr + i) = *Data;
 
}
 
void cat_to_end( char *ptr ) {
 
    char *Eptr = ptr;
    char *Data = "REORG||||||";
    
    while( *Eptr != EOF )
            ++Eptr;
 
    while( *Data != '\0' )
        *Eptr++ = *Data++;
 
    *Eptr = EOF;
 
}
Но он делает только то, что вам нужно и ничего более.
Yandex
Объявления
06.09.2007, 22:58     Дописать фаил
Ответ Создать тему
Опции темы

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