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

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

Войти
Регистрация
Восстановить пароль
 
nati94
2 / 2 / 0
Регистрация: 18.02.2013
Сообщений: 29
#1

Переход на нужную позицию в файле и затем считывание с этой позиции - C++

18.05.2013, 01:47. Просмотров 266. Ответов 0
Метки нет (Все метки)

программа организация дека из файла, файл текстовый, можно бинарный, но так удобней

тут только часть кода, наверн этого достаточно

я строю дек
затем хочу добавить еще элемент, справа и слева
потом удаляю, очищаю память

пробовала и функцииями fseek(), ftell() и fgetpos(),fsetpos
но результат в принципе одинаковый, когда считываю, то считывается, как я понимаю, пустая строка
все работает кроме этого кусочка
если не заморачиваться и добавлять первый элемент из файла, то выводит нормально, но мне надо считывать файл последовательно
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
void Spisok::FormFromFile ()
//Построение дека :// ld - указатель на левый конец дека,
// rd - Указатель на правый конец дека.
{ file=fopen(filename,"r+t");
  node *k;
  TICKET el;
  int i=1;
  printf("Построение дека из файла:\n");
 fseek(file, 0, SEEK_SET); 
 fscanf(file,"%d  %s  %s  %s  %s\n",&el.number,&el.Station_Departure,&el.Station_Coming,&el.Data_Time_Departure,&el.Data_time_Coming); 
  
  if  (i)
  { l=0;
    k = new (node);
    (*k).elem =el; 
    (*k).sled = NULL;
    ld = k; rd = k; 
    l++;
    printf("Добавлен элемент,продолжать?? 0-нет");
    scanf("%i",&i);
    fscanf(file,"%d  %s  %s  %s  %s\n",&el.number,&el.Station_Departure,&el.Station_Coming,&el.Data_Time_Departure,&el.Data_time_Coming); 
    while  (i)
  {
    
      AddRight (el); 
  fscanf(file,"%d  %s  %s  %s  %s\n",&el.number,&el.Station_Departure,&el.Station_Coming,&el.Data_Time_Departure,&el.Data_time_Coming); 
  printf("Добавлен элемент,продолжать?? 0-нет");
  scanf("%i",&i);
   }
 }
 
  else
    {rd = NULL; ld = NULL;}
  fgetpos(file, &file_loc);  
  fclose(file);
}
 
 
void Spisok::AddFromFileRight()
// Помещение звена, содержащего элемент el, в дек справа.
// ld - указатель на левый конец дека,
// rd - указатель на правый конец дека.
{ node *k;
TICKET el;
file=fopen(filename,"r+t");
  k = new (node);
  //fseek(file,position, SEEK_SET);
  fsetpos(file, &file_loc);
  fscanf(file,"%d  %s  %s  %s  %s\n",&el.number,el.Station_Departure,el.Station_Coming,el.Data_Time_Departure,el.Data_time_Coming); 
  printf("Номер\tСтанция отправления\tСтанция прибытия\tДата отправления\tДата прибытия\n");
  printf("Добавленный элемент справа:\n%d  %s  %s  %s  %s\n",&el.number,
      el.Station_Departure,el.Station_Coming,el.Data_Time_Departure,el.Data_time_Coming);
   l++;
  (*k).elem = el;
  (*k).sled = NULL;
  if  (rd!=NULL)
    {(*rd).sled = k; rd = k;}
  else
    {rd = k; ld = k;}
  fgetpos(file, &file_loc);
  fclose(file);
  }
 
void Spisok::AddFromFileLeft()
//Помещение звена, содержащего элемент el, в дек слева.
// ld - указатель на левый конец дека,
// rd - указатель на правый конец дека.
{
  node *k;
  TICKET el;
  file=fopen(filename,"r+t");
  k = new (node);
  fsetpos(file, &file_loc); 
  fscanf(file,"%d  %s  %s  %s  %s\n",&el.number,el.Station_Departure,el.Station_Coming,el.Data_Time_Departure,el.Data_time_Coming); 
  printf("Добавленный элемент слева:\n%d  %s  %s  %s  %s\n",&el.number,
      el.Station_Departure,el.Station_Coming,el.Data_Time_Departure,el.Data_time_Coming); 
  position=ftell(file)+1;
   l++;
  (*k).elem = el; 
  (*k).sled = ld;
  if  (ld!=NULL) ld = k;
  else  {ld = k; rd = k;}
  fgetpos(file, &file_loc);
  fclose(file);
}
Добавлено через 1 час 20 минут
помощь уже не нужна
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2013, 01:47     Переход на нужную позицию в файле и затем считывание с этой позиции
Посмотрите здесь:

C++ Запись и считывание с позиции в файле!
C++ Определить маршрут робота из позиции (хс, ус) в позицию (хф, уф)
Файлы. Как установить позицию в файле? C++
C++ Однонаправленный список. Операции: удалить элемент из заданной позиции, добавить элемент в заданную позицию,проверка на неравенство
C++ Как узнать что при считывание очередного слова в string был сделан переход на новую строку в файле?
C++ Как зафиксировать позицию в файле, а потом продолжить с неё считывание
C++ Ifstream переход в определенную позицию
Битовые операции: установить 0 в нужную позицию C++
Считывание из файла с заданной позиции C++
Как найти нужную строку в txt файле? C++
C++ Извлечь 3 бита целого числа A с позиции n и перенести в число B на позицию m
Измнение позиции в файле C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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