Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 30.10.2009
Сообщений: 12

нужна идея по поводу взаимодействия файлов!!

16.06.2010, 15:03. Показов 641. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Пишу курсовик, почти закончил. Не работает 1 обработчик.

Преамбула:

И так, у меня есть два файла, в одном хранятся списки учеников, их личные данные(File1), а в другом оценки по 8 предметам, за полугодие и год(File2). Все данные выводятся в StringGrid.

File1 записывается из введенных данных на главной форме,выводится все тоже на главной форме,кроме второго файла.

Имеется 3ья форма, "Карта студента", где выводятся данные конкретного студента и его оценки.

File2 записывается на второй форме, назовем ее "Редактирование оценок ученика", перед редактированием происходит поиск ученика по его уникальному ученическому коду, а далее изменяются его оценки и они сохраняются во втором файле, включая его УК.
Запись происходит через переменную типа record.



Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
type Tstudent = record
type Tstudent = record
   id:string[12];
  surname:string[25];
  adress:string[50];
  phone:string[9];
  lesson:string[30];
  mat1:extended;
  mat2:extended;
// .......
  xim1:extended;
  xim2:extended;
end;
 
 
//...
AssignFile(F2,'File2.dat');
reset(F2);
for i:=1 to FileSize(f2) do
read(F2,f);
//....
write(F02,f);
CloseFile(F02);


Проблема:

В общем плане,проблема заключается в том, что в форме "Карта ученика", конкретному ученику не выводятся его оценки. Получается так, что оценки выводятся только одному ученику из списка. У остальных ничего. Я подозреваю, что идет не верная запись в файл,я не знаю как правильно указывать в какое место файла следует записывать что-либо, и как обратится именно к этому месту файла при считывании.


Код:




Запись:





Delphi
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
procedure TEditing.BitBtn2Click(Sender: TObject);
var search,i,j,jk:Integer;
a1,a2,b1,b2,c1,c2,d1,d2,e1,e2,f1,f2,g1,g2,h1,h2,j1,j2:string;
begin
abc:=MainWindow.StringGrid1.row;
ik:=abc;
AssignFIle(F02,'File2.dat');
reset(F02);
setlength(mas2,FileSize(F02)+1);
if Stringgrid1.Cells[1,1]<>'' then
 
if comboboxex1.ItemIndex=0 then
 begin
  if RadioButton1.checked  then
      begin
    a1:=(Edit5.Text);
    StringGrid2.Cells[2,1]:=a1;
       end;
   if RadioButton2.checked then
      begin
    a2:=Edit5.Text;
    StringGrid2.Cells[1,1]:=a2;
       end;
    end;
  //......
  if comboboxex1.ItemIndex=8 then
    begin
        if RadioButton1.checked  then
      begin
    j1:=Edit5.Text;
    StringGrid2.Cells[2,9]:=j1;
       end;
   if RadioButton2.checked then
      begin
    j2:=Edit5.Text;
    StringGrid2.Cells[1,9]:=j2;
       end;
    end;
 
 
 
 if (Stringgrid2.cells[1,1]<>'') or (Stringgrid2.cells[2,9]<>'')  then
begin
    mas2[ik].id:=mas1[abc].id;
   mas2[ik].mat1:=StrToFloat(StringGrid2.Cells[2,1]);
    mas2[ik].mat2:=StrToFloat(StringGrid2.Cells[1,1]);
    //....
    mas2[ik].xim2:=StrToFloat(StringGrid2.Cells[1,8]);
    end;
 
for I := 0 to FileSize(F02)-1 do
begin
if i=ik  then
begin
    f.id:=mas2[abc].id;
    f.mat1:=mas2[ik].mat1;
    f.mat2:=mas2[ik].mat2;
   //......
    f.xim2:=mas2[ik].xim2;
    write(F02,f);
    end;
   end;
   CloseFile(F02);
   end;

Считывание:


Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
a:=StringGrid1.row;
 AssignFile(F02,'File2.dat');
     reset(F02);
     Seek(F02,0);
    for i:=0 to FileSize(F02)-1 do
    begin
    read(F02,f);
      for j:=0 to mainWindow.StringGrid1.RowCount -1  do
      begin
       if (j=a) and (f.id=MainWindow.Stringgrid1.cells[1,a]) then
      begin
      StringGrid2.Cells[1,1]:=FloatToStr(f.mat1);
      StringGrid2.Cells[2,1]:=FloatToStr(f.mat2);
       //....
      StringGrid2.Cells[1,9]:=FloatToStr(f.xim1);
      StringGrid2.Cells[2,9]:= FloatToStr(f.xim2);
      if j>a then
      begin
      abort;
      end;
      end;

Как решить проблему,поправив мой код или подскажите новую идею!

P.S Уровень понимания Delphi - средне-низкий.

Добавлено через 46 минут
Нужно как можно быстрее,сдавать завтра, пожалуйста выручайте! Спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.06.2010, 15:03
Ответы с готовыми решениями:

\\\Нужна идея, совет. По поводу взамодействия с БД
Так вот. Есть приложение, к которому подключена БД. Это приложение запускается на нескольких компьютерах объединенных в локальную сеть. Как...

По поводу взаимодействия Excel и Access
Вопрос такой: возможно ли, открыв Excel из Access, запустить макрос Excel из личной книги макросов??? Если можно, то как? Заранее...

Появилась идея , по поводу работы с яшей
При покупке ссылок с сайтов с схожей тематикой, возникает сложность в конкурентной борьбе, мало кто захочет рекламировать конкурента. ...

5
 Аватар для Андрей Борисови
714 / 402 / 33
Регистрация: 04.10.2009
Сообщений: 1,686
16.06.2010, 15:11
Цитата Сообщение от defaze Посмотреть сообщение
Seek(F02,0);
этим вы переходите на 1 строку файла. и
Цитата Сообщение от defaze Посмотреть сообщение
for i:=0 to FileSize(F02)-1 do
столько раз её же и читаете

добавте
Delphi
1
Seek(F02,I);
перед "end;" закрытия цикла For
1
0 / 0 / 0
Регистрация: 30.10.2009
Сообщений: 12
16.06.2010, 15:50  [ТС]
Все равно тоже самое,считывает только самые последние записанные данные. точнее при read(F02,f) он с первого круга видит, последние записанные данные.

Вопрос: Write(F2,f) - точно не записывает информацию в начало файла?
0
КотЪ
 Аватар для Zabiyak
219 / 219 / 60
Регистрация: 26.05.2009
Сообщений: 688
16.06.2010, 16:01
Информация записывается туда, где стоит "виртуальный курсор" в файле, т.е. на определённую позицию считывания/записи. Она зависит от операций, которые вы проделывали с файлом раньше.
Процедура reset на сколько я помню, как раз и ставит "курсор" в самое начало файла.
Для установки позиции в конец используйте функцию Seek(F,N), где F - файл, N - номер записи в файле, начиная с которого будет выполнена следующая операция записи/считывания.
1
0 / 0 / 0
Регистрация: 30.10.2009
Сообщений: 12
16.06.2010, 16:07  [ТС]
Буду побывать,спасибо!
0
Добрый самаритянин
 Аватар для John_Pa9JIbHuK
1107 / 622 / 139
Регистрация: 31.03.2009
Сообщений: 2,567
16.06.2010, 19:24
defaze, перед началом записи в файл пиши
Delphi
1
Seek(F,FileSize(F));
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.06.2010, 19:24
Помогаю со студенческими работами здесь

Необходима консультация по поводу взаимодействия Excel и Access
Добрый день всем. В данной ветке форума я - новичок, больше &quot;тусуюсь&quot; в разделе по Access, т.к. базами данных увлекаюсь давно, а вот в...

Необходима консультация по поводу организации взаимодействия Access и Excel
Добрый день всем. Сначала вкратце опишу предысторию. Есть мебельный салон, который имеет склад, производственный цех и т.д....

Нужна идея
Доброго. Есть вопросик: написать курсач на делфи с гуишкой. Самое главное - придумать тему, а идей ноль. Есть ли у Вас какие-нибудь идейки...

Нужна идея
У меня проблема с типовой конфигурацией &quot;Производство+Услуги+Бухгалтерия&quot;, необходимо нарисовать отчет по материалам. Материалы (или сырье)...

Нужна идея!
Подскажите пожалуйста... ...ситуация следующая: есть таблица с наименованиями и кол-вом продуктов, есть список рецептов с калькуляцией...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru