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

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

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

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

18.05.2013, 01:47. Просмотров 287. Ответов 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 минут
помощь уже не нужна
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2013, 01:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Переход на нужную позицию в файле и затем считывание с этой позиции (C++):

Запись и считывание с позиции в файле! - C++
Нужно лабу накатать, ищу информацию по этой теме! Пока не очень успешно! Если кто может подкиньте информацию или где хоть искать!^^ ...

Как зафиксировать позицию в файле, а потом продолжить с неё считывание - C++
Всем доброй ночи (или доброго утра). Возник вопрос о том, как зафиксировать позицию в файле, а потом продолжить с неё читать. Набросал код,...

Как узнать что при считывание очередного слова в string был сделан переход на новую строку в файле? - C++
подскажите пожалуйста, как узнать что при считывание очередного слова в string был сделан переход на новую строку в файле?. ПС не...

Битовые операции: установить 0 в нужную позицию - C++
суть проблемы проста нужно сгенерировать число, чтобы 1 была в 31м бите, и 0 в 32м бите как установить 1 в 31 бит ясно (1<<31), но как...

Определить маршрут робота из позиции (хс, ус) в позицию (хф, уф) - C++
Имеется план местности, разбитой на квадраты, заданный матрицей размером NxN. Каждый квадрат имеет высоту относительно уровня моря,...

Извлечь 3 бита целого числа A с позиции n и перенести в число B на позицию m - C++
Доброго времени суток.Дана вот такая задача : извлечь 3 бита числа А, начиная с позиции n, и вставить их в число В, начиная с позиции...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.05.2013, 01:47
Привет! Вот еще темы с ответами:

Ifstream переход в определенную позицию - C++
Смотрите я прочитал файл и хочу перейти в определенную позицию, в которой был раньше. Как запомнить ту позицию и перейти в нее?

Считывание из файла с заданной позиции - C++
#include <stdio.h> #include <Windows.h> #include <iostream> #include <fstream> using namespace std; struct stud...

Как найти нужную строку в txt файле? - C++
Как найти нужную строку в txt файле из программы на C++. С помощью fstream. Заранее спасибо!

Добавление текста на нужную позицию в файле - Delphi
есть файл в котором вот так: строка1 строка2 .... .... еще строк куча потом текст: Сейчас я расскажу историю №1: ...


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

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

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