Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Noviv
7 / 7 / 8
Регистрация: 13.05.2013
Сообщений: 35
1

Скопировать строки из одного текстового файла в другой, расположив их в нем в порядке уменьшения длины

28.05.2013, 03:38. Просмотров 984. Ответов 1
Метки нет (Все метки)

Всем привет! Помогите мне с решением данной задачи! Мне уже через 4.5 часа ее нужно будет сдавать, а я не могу доделать ее.
Задача
Скопировать строки из одного текстового файла в другой, расположив их в нем в порядке уменьшения длины.
Вот код программы
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
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
 
int main(){
    FILE *source, *result;
    char answer, symbol, *counter;
    char** buf;
    unsigned strcounter=0, i=0;
    int len[50];
    puts("Welcome to the program to sort the rows base using file.\nTranslation produced by http://translation.google.ru/");
    puts("Search for the file \"source.txt\"...");//Ïîèñê ГґГ*éëГ* source.txt
    source=fopen("source.txt","rt");
    if(source!=NULL){
        puts("File is found.");//Г”Г*éë Г*Г*éäåГ*
        puts("Delete the file (y\\n)?");//ÓäГ*ëèòü ГґГ*éë?
        do{
            answer=getch();
            switch(answer){
                case 'y':
                    fclose(source);
                    if(!remove("source.txt")) {
                        puts("File successfully deleted. The program is closed!");//Г”Г*éë ГіГ±ГЇГҐГёГ*Г® ГіГ¤Г*ëåГ*
                        getch();
                        return 0;
                    }
                    else {
                        puts("An error has occurred! The program is closed!");//ÏðîèçîøëГ* îøèáêГ*! ÏðîãðГ*ììГ* Г§Г*êðûâГ*ГҐГІГ±Гї!
                        return(-1);
                    }
                    break;
                case 'n': break;
                default: puts("Wrong answer"); answer=0; break; //ГЌГҐГЇГ°Г*âèëüГ*ûé îòâåò
            }
        }while(answer==0);
    }
    else{
        puts("File not found.");//Г”Г*éë Г*ГҐ Г*Г*éäåГ*
        puts("It creates the file...");//ÑîçäГ*ГҐГІГ±Гї ГґГ*éë...
        source=fopen("source.txt","wt");
        if(source!=NULL){
            puts("File successfully created!");//Г”Г*éë ГіГ±ГЇГҐГёГ*Г® ñîçäГ*Г*!
            fclose(source);
            puts("Write in the file \"source.txt\". The program is closed!");
            getch();
            return(0);
        }
        else{ puts("Error creating file!"); return(-2);}//ГЋГёГЁГЎГЄГ* ñîçäГ*Г*ГЁГї ГґГ*éëГ*!
    }
//-------Ïîäñ÷èòûâГ*ГҐГ¬ ñòðîêè Гў ГґГ*éëå--------------------------------------------
    while(!feof(source)){//Г–ГЁГЄГ« ïîâòîðÿåòñÿ äî òîãî, ïîêГ* Г*ГҐ äîéäåò äî ГЄГ®Г*Г¶Г* ГґГ*éëГ*
        symbol=fgetc(source);
        if(symbol=='\n' || symbol==EOF) strcounter++;
        else i++;
    }
    printf("%d|||%d",strcounter,i);
//  counter=(char *)malloc(i*sizeof(char));
    buf=(char **)malloc(strcounter*sizeof(char));//ÂûäåëåГ*ГЁГҐ ГЇГ*ìÿòè äëÿ äâóìåðГ*îãî äèГ*Г*ìè÷åñêîãî Г¬Г*Г±Г±ГЁГўГ*
    for(i=0;i<strcounter;i++){
        buf[i]=(char *)malloc(50*sizeof(char));
    }
    i=0;
    int j=0;
    while(!foef(source)){//Г‡Г*ГЇГЁГ±Гј ñòðîê Гў Г¬Г*Г±Г±ГЁГў
        buf[i][j]=fgetc(source);
        if(buf[i][j]=='/n') j++;
    }
    for(i=0;i<strcounter;i++){
        len[i]=strlen(buf[i]);
    }
    printf("%d",len);
    getch();
    free(counter); free(strcounter);
    return 0;
}
В нем конечно есть ошибки, но это мне пока что побоку.

Вот что мне нужно доделать
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
//-------Ïîäñ÷èòûâГ*ГҐГ¬ ñòðîêè Гў ГґГ*éëå--------------------------------------------
    while(!feof(source)){//Г–ГЁГЄГ« ïîâòîðÿåòñÿ äî òîãî, ïîêГ* Г*ГҐ äîéäåò äî ГЄГ®Г*Г¶Г* ГґГ*éëГ*
        symbol=fgetc(source);
        if(symbol=='\n' || symbol==EOF) strcounter++;
        else i++;
    }
    printf("%d|||%d",strcounter,i);
//  counter=(char *)malloc(i*sizeof(char));
    buf=(char **)malloc(strcounter*sizeof(char));//ÂûäåëåГ*ГЁГҐ ГЇГ*ìÿòè äëÿ äâóìåðГ*îãî äèГ*Г*ìè÷åñêîãî Г¬Г*Г±Г±ГЁГўГ*
    for(i=0;i<strcounter;i++){
        buf[i]=(char *)malloc(50*sizeof(char));
    }
    i=0;
    int j=0;
    while(!foef(source)){//Г‡Г*ГЇГЁГ±Гј ñòðîê Гў Г¬Г*Г±Г±ГЁГў
        buf[i][j]=fgetc(source);
        if(buf[i][j]=='/n') j++;
    }
    for(i=0;i<strcounter;i++){
        len[i]=strlen(buf[i]);
    }
    printf("%d",len);
    getch();
    free(counter); free(strcounter);
    return 0;
Пытался уже всяко, но в голову ничего не лезет.

Добавлено через 7 минут
Чуть не забыл. Использовать только динамические массивы. У меня там конечно есть статические, но это я сделал временно
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2013, 03:38
Ответы с готовыми решениями:

Скопировать строки из одного файла в другой в обратном порядке
Необходимо написать программу ,копирующую строки из одного файла в другой в...

Скопировать все строки из одного файла в другой
Нужно скопировать все строки из одного файла в другой, но после выполнения...

Скопировать из одного файла в другой все строки, не содержащие слова, начинающиеся на одну букву
1) Скопировать из файла F1 в файл F2 все строки, которые не содержат слова,...

Скопировать из одного файла в другой все строки, начинающиеся на «а» и расположенные между строками с заданными номерами
Помогите в работе с файлами. 1)Скопировать из файла Fail1 в файл Fail2 все...

Разработать программу, копирующую из одного текстового файла в другой строки, оканчивающиеся восклицательным знаком
Разработать программу, копирующую из одного текстового файла в другой строки,...

1
anmartex
...
1714 / 1207 / 908
Регистрация: 12.02.2013
Сообщений: 1,978
28.05.2013, 07:37 2
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#include <stdio.h>
#include <stdlib.h>
 
typedef struct line_t
{
   char* pstr;
   size_t length;
}  TLine;
 
//-----------------------------------------------------------------------------
// Функция открытия файла, в случае ошибки программа завершается
FILE* FileOpen(const char* fname, const char* params)
{
   FILE* f = fopen(fname, params);
 
   if (f == NULL)
   {
      perror(fname);
      system("pause");
      exit(EXIT_FAILURE);
   }
 
   return f;
}
//-----------------------------------------------------------------------------
// Функция загружает в память данные из файла
char* GetTextFromFile(const char* fname)
{
   FILE* f = FileOpen(fname, "r");
 
   fseek(f, 0, SEEK_END);
   size_t size = ftell(f);
   fseek(f, 0, SEEK_SET);
 
   char* text = (char*) malloc(size + 1);
   text[size] = 0;
 
   fread(text, size, 1, f);
 
   fclose(f);
 
   return text;
}
//-----------------------------------------------------------------------------
// Функция подсчитывает количество строк в тексте
size_t GetCountLine(const char* text)
{
   size_t count = 1;
 
   for (; *text; ++text)
   {
      if (*text == '\n')
      {
         count++;
      }
   }
 
   return count;
}
//-----------------------------------------------------------------------------
// Функция загружает информацию о строках
size_t GetListLines(char* text, TLine** lines)
{
   size_t count = GetCountLine(text);
 
   *lines = (TLine*) malloc(sizeof(TLine) * count);
 
   size_t i;
 
   for (i = 0; i < count; ++i)
   {
      (*lines)[i].pstr = text;
      (*lines)[i].length = 0;
      while (*text && (*text++ != '\n'))
      {
         (*lines)[i].length++;
      }
   }
 
   return count;
}
//-----------------------------------------------------------------------------
// Функция сортировки для qsort
int SortFunction(const void *a, const void *b)
{
   return (((TLine*)a)->length - ((TLine*)b)->length);
}
//-----------------------------------------------------------------------------
// Функция выгружает данные в файл
void LinesToFile(const char* fname, const TLine* lines, size_t count)
{
   FILE* f = fopen(fname, "w");
 
   size_t i;
 
   for (i = 0; i < count; ++i)
   {
      fprintf(f, "%.*s\n", lines[i].length, lines[i].pstr);
   }
 
   fclose(f);
}
//-----------------------------------------------------------------------------
 
int main()
{
   char* text = GetTextFromFile("program.c");
 
   TLine* lines = NULL;
   size_t count = GetListLines(text, &lines);
 
   qsort(lines, count, sizeof(TLine), SortFunction);
 
   LinesToFile("result.txt", lines, count);
 
   free(lines);
   free(text);
 
   system("pause");
 
   return EXIT_SUCCESS;
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.05.2013, 07:37

Скопировать содержимое одного файла в другой файл
Скопировать содержимое одного файла в другой файл. Для копирования использовать...

Скопировать содержимое одного файла в другой файл
есть рабочий код нужно только доработать , помогите пожалуйста вот задание...

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


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

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

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