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

Работа с текстовым файлом. Удаление строки. - C++

Восстановить пароль Регистрация
 
 
studentka2012
0 / 0 / 0
Регистрация: 03.07.2013
Сообщений: 20
03.07.2013, 13:33     Работа с текстовым файлом. Удаление строки. #1
День добрый.такой вопрос:мне нужно удалять из файла строчку с данными,если есть совпадение с введенной строкой.то есть,если я ввожу фамилию и такая фамилия есть в строке файла,который я открываю,то эту строчку нужно удалить.ПРоблема в том,что я не знаю,как удалить нужную строчку.И еще- вылезает запись "введите фамилию" столько раз,сколько записей в файле.а нужно по идее просто один раз ввести фамилию и чтоб по строчкам пройтись и найти такую подстрочку.Все строчки,в которых нет совпадений,я записываю в новый файл...помогите пожалуйста разобраться
ВОТ мой код:
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
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include < conio.h>
#include <iostream>
#include <string.h>
#include "locale.h"
using namespace std;
 
 
void main ()
{
    setlocale(LC_ALL, "Russian");
    system("cls");  // Очистка экрана
    int a,b=1;
    char famil2[30];
    char famil[20];
    char imya[30];
    char otchest[30];
    int nomer;
    int ocenki;
    int i,o,p=1;
    int count=1;
    char s[200];
    FILE*t,*nf;
    t=fopen("D:\\программирование\\прога\\tenis\\tenis\\student.txt","r+");
    if((t=fopen("D:\\программирование\\прога\\tenis\\tenis\\student.txt","r+"))==NULL)
        {printf("Ошибка при открытии файла.\n");
            exit(1);
        }
    nf=fopen ("temp.txt","w");//создаю новый файл для записи внего строк,в которых нет совпадений с введенной фамилией
 
        
    while(!feof(t))
        {
            printf("Введите фамилию: ");
            scanf("%s",famil2);
            if (fgets(s,200,t))
            {
                if(s==famil2)//если в строке есть такая фамилия
                {
                char*stud;
                stud=strstr(s,famil2);//функция поиска подстрок в строке
                //не знаю,как удалить строку???
                }
                if (s!=famil2)//если нет совпадений
                    fputs(s,nf);//записываю строку в новый временный 
            }
        }
    fclose (t);
    fclose (nf);
    remove("D:\\программирование\\прога\\tenis\\tenis\\student.txt");//удаляю прежний файл с данными(но он не удаляется почему-то)
    rename ("temp.txt","stud.txt");//переименовываю временный файл
            system ("pause");
            fclose(t);
            
            
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
03.07.2013, 16:08     Работа с текстовым файлом. Удаление строки. #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
#include <iostream>
#include <fstream>
#include <string>
#include <windows.h>
 
int main(int argc, char** argv) 
{
   SetConsoleCP (1251); SetConsoleOutputCP (1251);
   
   std::ifstream ifs("D:/file.txt");
   if (ifs.is_open())
   {
      std::ofstream ofs("D:/result.txt");
      std::string finding_world;
      std::cout<<"Введите нужное слово:->"; std::cin>>finding_world;
      finding_world += " "; finding_world.insert(0, " ");
      std::string line;
      while (std::getline(ifs, line))
      {
         if (line.find(finding_world) == std::string::npos)
            ofs<<line<<'\n';
      }
   }
   else
      std::cerr<<"Ошибка открытия файла(ов).\n";
 
   return 0;
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.07.2013, 18:34     Работа с текстовым файлом. Удаление строки. #3
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
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <string.h>
#include "locale.h"
using namespace std;
 
 
int main ()
{
    setlocale(LC_ALL, "Russian");
    system("cls");  // Очистка экрана
    int a, b = 1;
    char famil2[30];
    char famil[20];
    char imya[30];
    char otchest[30];
    int nomer;
    int ocenki;
    int i, o, p = 1;
    int count = 1;
    char s[200];
    FILE *t, *nf;
    t = fopen("D:\\программирование\\прога\\tenis\\tenis\\student.txt", "r+");
    if(t == NULL)
    {
        printf("Ошибка при открытии файла.\n");
        system ("pause");
        exit(1);
    }
    nf = fopen ("stud.txt", "w");//создаю новый файл для записи в него строк, в которых нет совпадений с введенной фамилией
    
    printf("Введите фамилию: ");
    scanf("%s",famil2);
    int flag = 0;
    while(!feof(t))
    {
        if (fgets(s, 200, t))
        {
            char temp[30];
            int i = 0;
            while (sscanf(s + i, "%s", temp))
            {
                if (!strcmp(famil2, temp)) 
                {
                    flag = 1;
                    break;
                }
                i += strlen(temp) + 1;
                if (i >= strlen(s)) break;
            }
            
            if (!flag) //если нет совпадений
                fputs(s, nf); //записываю строку в новый временный
            flag = 0;
        }
    }
    fclose (t);
    fclose (nf);
    
    remove("D:\\программирование\\прога\\tenis\\tenis\\student.txt");//удаляю прежний файл с данными(но он не удаляется почему-то)
    
    system ("pause");
    return 0;
}
studentka2012
0 / 0 / 0
Регистрация: 03.07.2013
Сообщений: 20
03.07.2013, 18:40  [ТС]     Работа с текстовым файлом. Удаление строки. #4
не совсем поняла ваш код..Попыталась его скомпилировать,но выдал много ошибок..просто мне б мой код отредактировать.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.07.2013, 18:42     Работа с текстовым файлом. Удаление строки. #5
Цитата Сообщение от studentka2012 Посмотреть сообщение
не совсем поняла ваш код..
Чей?
studentka2012
0 / 0 / 0
Регистрация: 03.07.2013
Сообщений: 20
03.07.2013, 18:47  [ТС]     Работа с текстовым файлом. Удаление строки. #6
alsav22,СПАСИБО БОЛЬШОЕ))ПРОСТО КЛАСС))
alsav22
03.07.2013, 18:55
  #7

Не по теме:

Цитата Сообщение от studentka2012 Посмотреть сообщение
СПАСИБО БОЛЬШОЕ
На здоровье!

studentka2012
0 / 0 / 0
Регистрация: 03.07.2013
Сообщений: 20
03.07.2013, 22:52  [ТС]     Работа с текстовым файлом. Удаление строки. #8
а вот такая ситуация возникла-если вводить не только фамилию,то есть еще и имя,и отчество вводить.и искать в строках все эти данные.то как это реализовать?заранее спасибо
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.07.2013, 23:27     Работа с текстовым файлом. Удаление строки. #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
...
    printf("Введите фамилию: ");
    scanf("%s",famil2);
    printf("Введите имя: ");
    scanf("%s",imya);
    printf("Введите отчество: ");
    scanf("%s",otchest);
...
 
    while (sscanf(s + i, "%s", temp))
    {
        if (!strcmp(famil2, temp) || !strcmp(imya, temp) || !strcmp(otchest, temp)) 
        {
            flag = 1;
            break;
        }
        i += strlen(temp) + 1;
        if (i >= strlen(s)) break;
    }
...
studentka2012
0 / 0 / 0
Регистрация: 03.07.2013
Сообщений: 20
04.07.2013, 12:20  [ТС]     Работа с текстовым файлом. Удаление строки. #10
можете еще немного подсобить))Мне надо теперь добавлять и удалять оценки для выбранного студента,то есть ищу по ФИО.В моем коде я пока пытаюсь хотя бы добавить оценки для выбранного студента,и у меня получается,что при совпадении записывается строчка и я дописываю оценку,но эти новые оценки идут в новую строку,а надо чтоб в ту же строчку,то есть для одного студента всё в одну строчку.И получается,если я создаю новый файл,куда записываю студентов с совпавшими ФИО и дописываю к ним оценки,то в этот же файл мне надо записать тех студентов,фио которых не совпали,просто без изменения их записать в новый файл.(ну а про удаление оценок у выбранных студентов вообще молчу)
Код:
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
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <string.h>
#include "locale.h"
using namespace std;
 
 
void main ()
{
    setlocale(LC_ALL, "Russian");
    system("cls");  // Очистка экрана
    int a, b = 1;
    char famil2[30];
    char famil[20];
    char imya[30];
    char imya2[30];
    char otchest[30];
    char otchest2[30];
    int nomer;
    int ocenki;
    int i, o, p = 1;
    int count = 1;
    char s[200];
    char dob[100];
    FILE *t, *nf;
    t = fopen("D:\\программирование\\прога\\tenis\\tenis\\student.txt", "r+");
    if(t == NULL)
    {
        printf("Ошибка при открытии файла.\n");
        system ("pause");
        exit(1);
    }
    
    nf = fopen ("stud.txt", "w+");//создаю новый файл для записи в него строк, в которых нет совпадений с введенной фамилией
    printf("Введите фамилию: ");
    scanf("%s",famil2);
    printf("Введите имя: ");
    scanf("%s",imya2);
    printf("Введите отчество: ");
    scanf("%s",otchest);
    int flag = 0;
    while(!feof(t))
    {
        if (fgets(s, 200, t))
        {
            
            char temp[30];
            int i = 0;
            while (sscanf(s + i, "%s", temp))
                {
                    if (!strcmp(famil2, temp) || !strcmp(imya, temp) || !strcmp(otchest, temp)) 
                     {
                         
                         printf("Введите оценку: ");
                         scanf ("%d", &ocenki);
                        sprintf(dob,"%d |",ocenki);
                        while(1)//бесконечный цикл для ввода оценок
                        {
                            printf("Ввести еще оценку? (1-да, 2-выход) ");
                            scanf ("%d",&p);    
                            if (p==1)
                            {
                                printf ("Введите следующую оценку: ");
                                scanf ("%d", &ocenki);
                                sprintf(dob,"%d |",ocenki);
                                sprintf(dob," ");
                            }
                            else break;
                        }
                    i += strlen(temp) + 1;
                    if (i >= strlen(s)) break;
                    strcat(s,dob);
                    fputs(s,nf);    
                     }
                    else fputs(s,nf);//если нет совпадений
                    break;
                 }
            
            if (!flag)
            
                break; 
            flag = 0;
        }
    }
    fclose (t);
    fclose (nf);
    
    
    
    system ("pause");
    
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.07.2013, 18:33     Работа с текстовым файлом. Удаление строки. #11
Всё это, вообще-то, не так делается, а через структуры и операции с ними. На форуме много таких тем. Поиск используйте. Вот здесь, например, почитайте: создать структуру, элементами которой являются фамилия студента и его возраст
studentka2012
0 / 0 / 0
Регистрация: 03.07.2013
Сообщений: 20
05.07.2013, 12:30  [ТС]     Работа с текстовым файлом. Удаление строки. #12
Сделала добавление оценок.теперь надо удалять их у выбранного студента.

Добавлено через 1 час 3 минуты
Скажите пожалуйста,как мне записать в новый файл из старого только часть строки.то есть без оценок?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.07.2013, 18:32     Работа с текстовым файлом. Удаление строки. #13
Почему через структуры не хотите делать? Будет всё криво. То, что у вас в коде, это не поиск нужного студента, а поиск записи, в которой есть или искомая фамилия, или имя, или отчество, но не все три вместе.
studentka2012
0 / 0 / 0
Регистрация: 03.07.2013
Сообщений: 20
05.07.2013, 18:40  [ТС]     Работа с текстовым файлом. Удаление строки. #14
alsav22,просто я вообще со структурами не работала.. и разбираться времени нет.скоро практику сдавать уже надо.я вот застряла на удалении оценок,а потом мне надо будет еще из исходного текста искать студентов с одним номером группы и записывать в новый файл,высчитывая их средний балл
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.07.2013, 18:58     Работа с текстовым файлом. Удаление строки. #15
Цитата Сообщение от studentka2012 Посмотреть сообщение
я вот застряла на удалении оценок,а потом мне надо будет еще из исходного текста искать студентов с одним номером группы и записывать в новый файл,высчитывая их средний балл
Если не делать нормально, то застрянете навсегда.

Добавлено через 45 секунд
Задание как звучит?
studentka2012
0 / 0 / 0
Регистрация: 03.07.2013
Сообщений: 20
05.07.2013, 19:24  [ТС]     Работа с текстовым файлом. Удаление строки. #16
мне сейчас вот что надо:у меня есть исходный файл,в каждой строке которого находится информация о студентах:фио,номер группы,несколько оценок.так вот-надо сделать так,что бы удалялись оценки у выбранного студента,то есть вводишь фио,если есть такое фио в исходном тексте,то у этого студента удаляются оценки
alsav22
05.07.2013, 19:41
  #17

Не по теме:

Цитата Сообщение от studentka2012 Посмотреть сообщение
мне сейчас вот что надо
Надо - делайте.

studentka2012
0 / 0 / 0
Регистрация: 03.07.2013
Сообщений: 20
05.07.2013, 20:04  [ТС]     Работа с текстовым файлом. Удаление строки. #18
так я и так делаю,не получается(((((((((((
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.07.2013, 04:41     Работа с текстовым файлом. Удаление строки. #19

Не по теме:

Цитата Сообщение от studentka2012 Посмотреть сообщение
так я и так делаю,не получается(((((((((((
Не получается, потому что изначально криво сделано. И дальше ещё больше будет не получаться.



Добавлено через 7 часов 55 минут
Кликните здесь для просмотра всего текста
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <Windows.h>
 
#define N 30 // N - 1 максимальное количество символов в Ф.И.О.
#define K 5 // количество оценок
 
#pragma pack(push, 1)
struct student
{
    char family [N]; // фамилия
    char name   [N]; // имя
    char otchest[N]; // отчество
    int  date[K];    // оценки
};
#pragma pack(pop) 
 
void add_student();   // добавление записи о студенте
void show_Students(); // вывод данных о студентах
void sort_Students(); // сортировка данных о студентах
void sort_buffer(struct student *buffer, int n); // сортировка буфера
void delete_student();  // удаление записи о студенте
void out_student(struct student *b);  // вывод данных о студенте на консоль
void in_student   (struct student *b); // чтение данных о студенте с консоли
int count_students(FILE *fin);  // подсчёт количества записей в файле
int compare_students(struct student b1, struct student b2); // сравнение данных о студентах на равенство Ф.И.О.
 
void write_student(struct student *b, FILE *fout);    // запись данных о студенте в файл
void read_student (struct student *b, FILE *fin );    // чтение данных о студенте из файла
struct student* read_to_buffer(int *n);               // создание буфера и чтение данных о студентах в буффер
int write_from_buffer(struct student *buffer, int n); // запись данных о студентах из буффера
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    
    int k = 0; // пункт меню
    do
    {
        printf("\n1. Добавить запись\n");
        printf("2. Показать все записи\n");
        printf("3. Сортировать записи\n");
        printf("4. Удалить запись\n");
        printf("5. Выход\n");
        
        scanf("%d", &k);
                getc(stdin);
        switch(k)
        {
            case 1: add_student(); 
                break;
            
            case 2: show_Students(); 
                break;
            
            case 3: sort_Students();
                break;
                        
            case 4: delete_student();
                break;
        }
    } while(k != 5 );
 
    return 0;
}
 
//.................................................................................
 
 
void add_student()  // добавление записей
{
  printf("\n\nКоличество добавляемых записей = ");
  int t; // количество добавляемых записей
  scanf("%d", &t);
  getc(stdin);
  if (t <= 0) return;
 
  //запись в файл
  FILE *fout;
  fout = fopen("Students.txt", "ab"); // открываем файл для бинарной дозаписи в конец файла, 
                                      // если файла нет, то создаётся
  struct student temp;
  int i;
  for(i = 0; i < t; i++) // чтение во временную структуру и запись в файл
  {  
     in_student(&temp);
         write_student(&temp, fout);
  }
  fclose(fout); 
}
 
//......................................................................................
 
void show_Students() // вывод данных о студентах
{ 
  FILE *fin;
  fin = fopen("Students.txt", "rb"); // открываем файл для бинарного чтения
  if (!fin) printf("\nДанных не существует.\n\n"); // если файла не существует
  else
  {
          int n = count_students(fin); // количество записей в файле
          struct student temp;
          int j = 0;
          int i;
          for (i = 0; i < n; ++i) // чтение записей и вывод на экран
          {  
                read_student(&temp, fin);
                printf("     %d\n\n", ++j);
                out_student(&temp);
          }
          fclose(fin);
   }
}
 
//.................................................................................
 
void sort_Students() // сортировка данных по фамилии 
{
   int n;
   struct student *buffer = read_to_buffer(&n); // создание буфера и чтение в него данных
   if (!buffer) return;
   
   // сортировка записей в буфере
        sort_buffer(buffer, n);   
        
        if (write_from_buffer(buffer, n)) // запись в файл отсортированного буфера
        {
                printf("\nДанные отсортированы по фамилии!\n");
                show_Students();
        }
                
        free(buffer);
}
 
//..........................................................................
 
void delete_student() // удаление записи о студенте
{
        int n; // количество записей в буфере
        struct student *buffer = read_to_buffer(&n); // создание буфера и чтение в него данных из файла
        if (!buffer) return;
   
        printf("Введите Ф.И.О. студента для удаления:\n");
        struct student b_delete;
        
        printf( "\nФамилия: "); gets(b_delete.family);
        printf( "Имя: ");       gets(b_delete.name);      
        printf( "Отчество: ");  gets(b_delete.otchest);  
       
        int flag = 0;
        int ind; // индекс записи для удаления в буфере
        int i;
        for (i = 0; i < n; ++i) // поиск в буфере записи для удаления
        {  
                if (compare_students(buffer[i], b_delete))
                { 
                        flag = 1; // если найдена запись для удаления, то устанавливаем flag
                        ind = i;  // запоминаем индекс записи в буфере
                        break;
                }
        }
        if (flag == 0) 
        {
                printf("\nТакая запись не найдена\n");
                        
                free(buffer);
                return;
        }
        else // перезаписываем файл 
        {
                int i;
                for (i = ind; i < n - 1; i++) // смещаем буфер на один элемент влево
                        buffer[i] = buffer[i + 1];
                
                write_from_buffer(buffer, n - 1); // записываем буфер в файл
                
                free(buffer);
                
                printf("\nЗапись удалена!\n");
        }
}
 
//........................................................................
 
void write_student(struct student *b, FILE *out) // запись данных о студенте в файл 
{
        fwrite(b, sizeof(struct student), 1, out);
}
 
//......................................................................
 
void read_student(struct student *b, FILE *in) // чтение данных о студенте из файла 
{
        fread(b, sizeof(struct student), 1, in);
}
 
//........................................................................
 
void out_student(struct student *b) // вывод данных о студенте на консоль
{
        puts(b ->family);       
        puts(b ->name);       
        puts(b ->otchest);    
        int i;
        for (i = 0; i < K; ++i)               
            printf("%d ", b ->date[i]); 
        puts("\n");
}
 
//........................................................................
 
void in_student(struct student *b) // ввод данных о студенте c консоли
{
        printf( "\nФамилия: "); gets(b ->family);
        printf( "Имя: ");       gets(b ->name);      
        printf( "Отчество: ");  gets(b ->otchest);  
        printf( "Оценки (%d):\n", K);
        int i;
        for (i = 0; i < K; ++i)
        {
            printf( "%d) ", i + 1);
            scanf("%d", &b ->date[i]);
        }
        getchar();
}
 
//.......................................................................
 
int count_students(FILE *fin) // подсчёт количества записей в файле
{
        fseek(fin, 0, SEEK_END); // перемотать на конец файла
        long file_size = ftell(fin); // получить размер файла
        long n = file_size / sizeof(struct student); // количество записей в файле
        fseek (fin , 0, SEEK_SET); // перемотать на начало файла
        
        return n;
}
 
//.......................................................................
 
int compare_students(struct student b1, struct student b2) // сравнение данных о студентах (Ф.И.О.)
{
    if ((!strcmp(b1.family,  b2.family ))  &&
        (!strcmp(b1.name,    b2.name  ))   &&
        (!strcmp(b1.otchest, b2.otchest))) 
    return 1;
    else return 0;
}
 
//........................................................................
 
struct student* read_to_buffer(int *n) // создание буфера и чтение файла в буффер
{
  FILE *fin;
  fin = fopen("Students.txt", "rb"); // открываем файл для бинарного чтения
  if (!fin) 
  {
        printf("\nДанных не существует.\n\n"); // если файла не существует
        return NULL;
  }
  else
  {
        *n = count_students(fin); // количество записей в файле
        struct student *buffer = (struct student*)malloc(*n * sizeof(struct student));  // память под буфер
                
        if (!buffer)
        {
                printf("\nНедостаточно памяти!\n");
                fclose(fin);
                return buffer;
        }
                
        fread(buffer, sizeof(struct student), *n, fin); // читаем файл в буфер
        fclose(fin);
                
        return buffer;
   }
}
 
//............................................................................
 
int write_from_buffer(struct student *buffer, int n) // запись в файл из буффера
{
  FILE *fout;
  fout = fopen("Students.txt", "wb"); // открываем файл для бинарной записи
  if (!fout) 
  {
        printf("\nОшибка при открытии файла для записи!.\n\n");
        return 0;
  }
  
  fwrite(buffer, sizeof(struct student), n, fout);
  fclose(fout);
  
  return 1;
}
 
//.......................................................................
 
void sort_buffer(struct student *buffer, int n) // сортировка буфера по фамилии студентов
{
        struct student temp;
        int i;
        for(i = 0; i < n - 1; ++i)
        {
                int j;
                for(j = 0; j < n - 1; ++j)
                {
                        int cmp;
                        cmp = strcmp(buffer[j].family, buffer[j + 1].family);
                        if(cmp > 0)
                        {
                                temp = buffer[j + 1];
                                buffer[j + 1] = buffer[j];
                                buffer[j] = temp;
                        }
                }
        }
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.07.2013, 05:46     Работа с текстовым файлом. Удаление строки.
Еще ссылки по теме:

C++ Работа с текстовым файлом
Работа с текстовым файлом C++
C++ Работа с текстовым файлом

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

Или воспользуйтесь поиском по форуму:
studentka2012
0 / 0 / 0
Регистрация: 03.07.2013
Сообщений: 20
06.07.2013, 05:46  [ТС]     Работа с текстовым файлом. Удаление строки. #20
alsav22,спасибо Вам большое)
Yandex
Объявления
06.07.2013, 05:46     Работа с текстовым файлом. Удаление строки.
Ответ Создать тему
Опции темы

Текущее время: 03:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru