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

Транспонировать таблицу и записать данные в шаблон

07.07.2016, 12:52. Показов 1777. Ответов 31
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет! У меня такая задача: имеем отчёт в виде таблицы 8х57 с цифрами. Таблицу надо транспонировать и записать данные в шаблон. Проблема в том, что данные я загружаю из текстового файла и выгружаю в другой. И не могу выгрузить данные в виде столбцов и строк. Выгружает все в одну строку. Никак не могу придумать код, чтобы данные стали таблицей в 8 столбцов и 57 строк. Магическое write('1.txt', a[i,j]:8); не работает. Помогите, пожалуйста!

Добавлено через 11 минут
код, который у меня есть
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
65
66
67
68
69
70
71
72
73
74
75
76
unit Unit2;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;
 
type
  TForm2 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    
 
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form2: TForm2;
 
implementation
 
{$R *.dfm}
 
procedure TForm2.Button1Click(Sender: TObject);
 var
  arr: array [0..8,0..57] of integer;
  arr2: array [0..57,0..8] of integer;
  i, j, n, m: integer;
  F1,  F2, F3: textfile;
  begin
 n := 8;
 m := 57;
 AssignFile(F3,'C:\Users\tanya\Desktop\proga\1_1.txt');
 rewrite(F3);
 Append(F3);
 AssignFile(F1,'C:\Users\tanya\Desktop\proga\1.txt');
 reset (F1);
 i:=0;
 while not EOF(F1) do
  begin
   j:=0;
   while not EOLN(F1) do
    begin
     read(F1, arr[i,j]);
     inc(j);
    end;
    read(F1, arr[i,j]);
    inc(i);
   end;
    for i:=0 to n-1 do
    for j:=0 to m-1 do
     //begin
     //arr2[i,j]:=arr[j,i];
     //end;
     //for i := 0 to n-1 do
     // for j := 0 to m-1 do
     //  begin
      //  inc(q);
      //  a[q] := arr2[i,j];
        //b[q] := arr2[i,j];
      // for i := 0 to n do
      // write(F3, arr[i,j], '  ');
       //end;
       memo1.Lines.text := (memo1.Lines.Text + IntToStr(arr[i,j]) + '   ');
       //Memo1.Lines.SaveToFile();
    closefile(F1);
    closefile(F3);
 end;
 
 
end.
Добавлено через 1 минуту
желательно даже как-то без мемо и стриггрида. чтобы сразу все выводило в файл. спасибо
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.07.2016, 12:52
Ответы с готовыми решениями:

Записать данные в таблицу
Доброго времени суток! Есть таблица: CREATE TABLE IF NOT EXISTS `private_senders` ( `uid`...

Как вывести Excel-таблицу в html и в html таблицу записать данные с БД?
есть у меня excel документ(таблица) , как вывести таблицу в html и в html таблицу записать данные с...

Записать данные из формы в таблицу
Доброго времени суток всем. Есть такой вопрос. На форме есть поле со списком, элементы...

Данные из Combobox записать в таблицу SQL
Добрый день, я только начинаю учиться в Delphi по этому не судите за вопрос ... Сам вопрос....

31
0 / 0 / 0
Регистрация: 07.07.2016
Сообщений: 16
14.07.2016, 09:21  [ТС] 21
Author24 — интернет-сервис помощи студентам
Вот такое извращение с досами. Если бы все было так просто с экселем, там все эти махинации делаются ровно 3минуты, ну сами понимаете. Файл числа.txt - это типа как должна выглядить табличка, вернее последовательность чисел.
В шаблоне 57 строк, потому что исходные файлы поделены на два. Их оба надо перевернуть, соединить засунуть в шаблон. Структура всегда одинаковая вроде.

У меня возникла идея считать все это безобразие по символам. Приблизительно это выглядит так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
While not EOF(f1In) do 
Begin 
 Read(f1In, Flag);
 J:=6;
 M:=1;
 C:=7;
 For I:=1 to 29 do
 Begin 
  A[m]:=strtoint(trim(copy(str(j,c))));
  j:=j+8;
  Inc(m);
 End;
Но пока у меня ругается, что типа в str incompatible types.
0
Модератор
9256 / 6034 / 2379
Регистрация: 21.01.2014
Сообщений: 25,793
Записей в блоге: 3
14.07.2016, 10:07 22
Цитата Сообщение от Tanya_posh Посмотреть сообщение
исходные файлы поделены на два. Их оба надо перевернуть, соединить засунуть в шаблон
Они всегда вот такие будут - битые на 2, или это ты сама специально сделала? И где второй файл тогда?

Добавлено через 9 минут
И кстати, ты ни разу нигде не упомянула: Delphi у тебя какой?
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
14.07.2016, 10:07 23
Нужно смотреть файлы как они есть, в оригинале, а не переделанные в Word.
0
0 / 0 / 0
Регистрация: 07.07.2016
Сообщений: 16
14.07.2016, 10:29  [ТС] 24
Всегда битые. Со вторым файлом пока не связываюсь, потому что его по аналогии считать можно. Ну это я пока так думаю))) второй файл идентичный абсолютно.
Делфи 7.
Файлы изначально ко мне попали доковские, но с досовской кодировкой. Такие исходники приходят. Не знаю откуда берутся.

В ходе выяснилось, что 1столбец на 1 ячейку длиннее остальных((( как это можно обыграть? 174 ячейка вылазит ошибка из-за этого.
0
Модератор
9256 / 6034 / 2379
Регистрация: 21.01.2014
Сообщений: 25,793
Записей в блоге: 3
14.07.2016, 11:51 25
Цитата Сообщение от Tanya_posh Посмотреть сообщение
Со вторым файлом пока не связываюсь, потому что его по аналогии считать можно. Ну это я пока так думаю)))
Уж если делать, то делать все сразу а не кусками... Высылай второй файл.
Цитата Сообщение от Puporev Посмотреть сообщение
Нужно смотреть файлы как они есть, в оригинале, а не переделанные в Word.
Да нет, они "нормальные" ДОСовские... А расширение - это не суть важно, Лексикон (помнишь такое чудо? ) тоже doc файлы делал...
0
0 / 0 / 0
Регистрация: 07.07.2016
Сообщений: 16
14.07.2016, 12:28  [ТС] 26
Ну, второй, так второй)) я думала, по аналогии для него все это сделать просто и соединить потом.
Вложения
Тип файла: doc 173r012.DOC (6.8 Кб, 4 просмотров)
0
1177 / 419 / 106
Регистрация: 31.03.2012
Сообщений: 1,145
14.07.2016, 20:24 27
обработка только одного файла, тот который с циферками от 1 до 29
D7 + VBScript Regular Expressions 5.5
Вложения
Тип файла: 7z cf0714.7z (19.4 Кб, 5 просмотров)
0
Модератор
9256 / 6034 / 2379
Регистрация: 21.01.2014
Сообщений: 25,793
Записей в блоге: 3
16.07.2016, 00:23 28
Лучший ответ Сообщение было отмечено Tanya_posh как решение

Решение

Tanya_posh, ну вот посмотри, что напридумывалось:
1. Запускаешь программу и нажимаешь кнопку (больше там ничего и нет на форме).
2. Программа проверяет наличие файла шаблона BLANK_r01.DOC. Он должен находиться рядом с ехе-шником и называться именно так. Если его там нет - программа огорчится и перестанет работать
3. Если шаблон присутствует - программа попросит указать, где расположена первая часть данных (в шапке диалогового окна так и написано: "Укажите первый файл". В случае отказа - программа будет ожидать повторного нажатия на кнопку, после чего продолжит свои домогательства касаемо первого файла
4. Если первый файл выбран - тут же последует требование предъявить ВТОРОЙ файл.
5. Когда оба файла будут выбраны, программа скажет "Все готово!" и закроется, а в папке рядом с ехе-шником появится файл с именем report_DDMMYYYY_HHMMSS.txt (DDMMYYYY_HHMMSS - это дата и время на момент формирования файла). Внутри этот файл представляет собой заполненный шаблон в "нормальной" DOS-овской кодировке.
Вот, в кратце, и все...
Вложения
Тип файла: rar 1111.rar (178.3 Кб, 4 просмотров)
1
0 / 0 / 0
Регистрация: 07.07.2016
Сообщений: 16
16.07.2016, 12:43  [ТС] 29
D1973, Спасибо огромное!!! это очень круто!!! сама я написала только до считывания второго файла и запоролась на ошибке их соединения! Огромное спасибо!!!
0
0 / 0 / 0
Регистрация: 07.07.2016
Сообщений: 16
25.07.2016, 12:57  [ТС] 30
А еще вопрос? Как считать цифры из файла, чтобы были просто цифры без этих разделителей? Короче, как уже из транспонированной и соединённой этой матрицы сделать просто цифры в столбик по 8 цифр в строке? Спасибо.
0
Модератор
9256 / 6034 / 2379
Регистрация: 21.01.2014
Сообщений: 25,793
Записей в блоге: 3
26.07.2016, 06:13 31
Tanya_posh, если брать за основу тот код, который я тебе выкладывал в посте #28 то после стороки
Delphi
1
2
//Сохраняем в файле с новым именем
L.SaveToFile(NewName);
вставь вот этот кусок:
Delphi
1
2
3
4
5
6
7
8
9
10
11
//Сохраняем файл с числами
TMP.Clear;
for i := 0 to c - 1 do
  begin
    s := '';
    for j := 0 to r - 1 do
      s := s + IntToStr(B[i, j]) + #9;
    TMP.Add(s);
  end;
TMP.SaveToFile('digits.txt');
//*************************************
в итоге в папке с программой кроме отчета появится файл digits.txt, в котором находится транспонированная матрица (числа в строке разделены знаком табуляции)
1
0 / 0 / 0
Регистрация: 07.07.2016
Сообщений: 16
26.07.2016, 07:39  [ТС] 32
D1973, спасибо огромное!!!
0
26.07.2016, 07:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.07.2016, 07:39
Помогаю со студенческими работами здесь

Подсчитанные данные из формы записать в таблицу
Добрый день. Есть две таблицы: 1. Таблица пациента. 2. Таблица с датами по этому пациенту. В...

Записать данные в выбираемую таблицу mysql
Доброго времени суток, подскажите пожалуйста: Есть 3 таблицы - A, B , C В таблицах одинаковые...

Как записать данные в таблицу Access
Доброго времени суток уважаемые, мне нужна ваша помощь. Имеется БД, суть в том что мне надо через...

Записать данные с запроса в другую таблицу
Есть запрос: $resp = mysql_query("select $metode, gruppa from experiment LEFT JOIN pechen...


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

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru