Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.88/26: Рейтинг темы: голосов - 26, средняя оценка - 4.88
2 / 2 / 0
Регистрация: 10.07.2014
Сообщений: 102

Сохранение файла в формате .par

31.07.2014, 12:55. Показов 5618. Ответов 49
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!! Помогите, пожалуйста, буду очень благодарен
Фактически сделал программу, (открывает .csv файл, разбирает его по столбцам в (CheckedListBox) и строкам в RadioButton(с диапазоном)) и после нажатия на кнопку, должно сохраняться в файл .par при этом иметь размер файла не более 1гб( если больше то сохранять в 2 файла) имя файла должно быть таким же как имя начального файла,
при этом формат файла .par должен иметь следующий вид (там где (-) значит без разницы какое значение)
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
#pragma pack(1)
struct PARS_OF_WRITE_FILE
{
(-)  char Code [20];//20 байт- «3571090,7859525»
(-)  char PlataName[17]; // 17 байт – название платы
(текущая дата)  char TimeString[26]; // 26 байт – число и время завершения ввода данных
(32)  WORD ChannelsMax; // 2 байта – общее число каналов для выбранной платы
(32)  WORD RealChannelsQuantity; // 2 байта – число введенных (активных) каналов
(-)  int RealKadrsQuantity; // 4 байта – устаревший параметр
(-)  int RealSamplesQuantity; // 4 байта – устаревший кадр
(кол-во строк)  double TotalTime; // 8 байт – время ввода в секундах в формате ‘DOUBLE’
(20)  float AdcRate; // 4 байта – частота АЦП в кГц в формате ‘FLOAT’
(-)  float InterkadrDelay; // 4 байта – межкадровая задержка в мс в формате ‘FLOAT’
(20/32)  float ChannelRate; // 4 байта – частота сбора данных с одного канала в кГц в формате ‘FLOAT’
(1)  bool ActiveAdcChannelArray[32]; // 1 байт *32 – массив , каждый элемент которого равен нулю или единице, единичное значение соответствует тому, что данный вход активен 
(1....32)  BYTE AdcChannelArray[32]; // 1 байт *32- массив, каждый элемент которого равен номеру канала АЦП для соответствующего входа 
(0)  BYTE AdcGainArray[32]; // 1 байт*32-массив, каждый элемент которого равен индексу коэффициенту  усиления(0,1,2 или 3)
(0)  BYTE IsSignalArray[32]; // 1 байт*31-массив, каждый элемент которого равен 0 или 1, единичное значение соответствует тому, что данный канал был заземлён на плате
(3)  int DataFormat; // 4 байта-формат данных, равен 3
(кол-во строк)  long long RealKadrs64; // 8 байт, число собранных кадров в 8-байтном формате 
(0)  double AdcOffset[32]; // 8 байт, коэффициенты смещения для подключенной платы АЦП( считываются из Flash памяти АЦП)
(1)  double AdcScale[32]; // 8 байт, , коэффициенты масштаба для подключенной платы АЦП( считываются из Flash памяти АЦП)
(1)  double CalibrScale[1024]; // 8 байт, пользовательские коэффициенты масштаба
(0)  double CalibrOffset[1024]; // 8 байт, пользовательские коэффициенты смещения 
(1)  int Segments; // число сегментов файла данных
};
#pragma pack()
далее записываются блоки данных переменной длины; кол-во блоков определяется значением переменной int Segments , Каждый блок включает:

C#
1
2
3
4
5
6
(кол-во строк)  long long current_segment_kadrs; // 8 байт, число кадров в текущем сегменте 
(текущее)  time_t current_segment_time; // 4 байта, время начало ввода сегмента в формате число секунд с 01.01.1900
(-)  double reserved1; // 8 байт, зарезервированы 
(-)  int type; // 4 байта, зарезервированы 
(-)  char current_segment_comment_on;  // ненулевое значение означает, что далее будет записано строка с комментарием(256 байт)  
(-)  char current_segment_comment[256];  //  комментарии (записываются только если comment_on=1)
помогите, пожалуйста, хотя бы примерно, или начало ,чтоб я мог продолжить,
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.07.2014, 12:55
Ответы с готовыми решениями:

Сохранение текстового файла с формате DOS\Windows
Добрый день. Возникла необходимость сохранять файл с формате DOS\Windows, а сохранение происходит в формате UNIX. Как осуществить...

Сохранение файла в формате txt
Как сохранить файл через SaveDialog в формате txt?

Сохранение файла в текстовом формате
Как сохранить данные из нескольких memo в формате txt чтобы данные данные из каждого memo представлялись отдельными столбцами, а то у меня...

49
 Аватар для ViterAlex
8953 / 4865 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
29.08.2014, 07:31
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от ked Посмотреть сообщение
вроде всё правильно
Что есть fot? Я постарался учесть замечания. Метод WriteToPAR изменил, добавил в него массив байтовых чисел, который нужно записывать в ActiveAdcChannelArray. Сам массив формируется перед вызовом метода WriteToPAR.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/// <summary>
/// Запись в PAR-файл
/// </summary>
/// <param name="dt">Таблица данных</param>
/// <param name="activeAdcChannelArray">Массив с активностью каналов. Если канал выбран, то в массиве должна быть 1, иначе — 0.</param>
static internal void WriteToPAR(DataTable dt, byte[] activeAdcChannelArray) {
    PARS_OF_WRITE_FILE header = new PARS_OF_WRITE_FILE(true);
    System.Windows.Forms.Clipboard.SetText(header.ToString());
    using (BinaryWriter bw = new BinaryWriter(File.Open(filename, FileMode.Create), Encoding.ASCII)) {
        //Запись полей с изменяемыми значениями.
        header.Code = "3571090,7859525";
        header.PlataName = "E440";
        header.TimeString = DateTime.Now.ToString("dd-MM-yyyy hh:mm:ss", CultureInfo.GetCultureInfo("en-us"));
        header.TotalTime = (double)dt.Rows.Count;
        header.RealKadrs64 = (long)dt.Rows.Count;
        header.RealChannelsQuantity = (short)dt.Columns.Count;
        header.ActiveAdcChannelArray = activeAdcChannelArray;//записываем массив.
        byte[] res = header.ToByteArray();
        bw.Write(res);
 
    }
}
Формирование массива ActiveAdcChannelArray и передача его для записи в PAR (в методе ConvertButton_Click):
C#
1
2
3
4
//Массив для параметра ActiveAdcChannelArray 
byte[] columns = Enumerable.Range(0, checkedListBox1.Items.Count).Cast<int>().Select(i => (byte)(checkedListBox1.GetItemChecked(i) ? 1 : 0)).ToArray<byte>();
//Сохранение в PAR-файл
ParFile.WriteToPAR(seldt, columns);
Заполнил массив через LINQ, т.к. везде мы его используем в этом проекте. Так уж чтобы и здесь не отступать от правила.
Кстати, вот и разрешилось маленькое несоответствие. Этот массив изначально был описан как bool, а не byte. Меня это удивляло, но я решил, что так и нужно. А оказывается он byte. Так что в структуре его тоже нужно поменять.
Цитата Сообщение от ked Посмотреть сообщение
осталось только с размерами файлов
Что с размерами файлов?
Вложения
Тип файла: zip sourceCode.zip (34.1 Кб, 6 просмотров)
1
2 / 2 / 0
Регистрация: 10.07.2014
Сообщений: 102
29.08.2014, 08:03  [ТС]
Цитата Сообщение от ViterAlex Посмотреть сообщение
Что есть fot?
Это есть int[] columnIndices, во второй форме

Цитата Сообщение от ViterAlex Посмотреть сообщение
Что с размерами файлов?
Цитата Сообщение от ked Посмотреть сообщение
Кстати, по поводу контроля размера файлов, нужно , чтобы конечные файлы не превышали размер 1Гб. Если один из файлов (.par и .dat) будет превышать размер в 1Гб, то должны создаваться следующие два файла (.par и .dat) , и имена файлов должны быть такими: "имя_часть_N" , где N - порядковый номер файла начиная с 1.
вот
0
 Аватар для ViterAlex
8953 / 4865 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
29.08.2014, 08:06
Ага, подумаю. Я так понял, запись dat-файла тебя устраивает?
0
2 / 2 / 0
Регистрация: 10.07.2014
Сообщений: 102
29.08.2014, 10:49  [ТС]
ViterAlex, да, dat-файл вроде пишется правильно, по крайней мере эти файлы открываются другой прогой
0
 Аватар для ViterAlex
8953 / 4865 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
31.08.2014, 09:42
Цитата Сообщение от ked Посмотреть сообщение
Если один из файлов (.par и .dat) будет превышать размер в 1Гб,
par может превысить 1Гб? Я это к тому, где встраивать проверку на размер: при записи обоих файлов или только при записи dat?
0
2 / 2 / 0
Регистрация: 10.07.2014
Сообщений: 102
31.08.2014, 17:29  [ТС]
ViterAlex, par файл не может достигать 1Гб, т.к. в нём практически записывается одна и та же информация на 17-18кб . Но проверку нужно встраивать на оба файла, т.е. если dat файл достигает 1Гб , то создаются новые dat и par файлы.

Добавлено через 2 минуты
ViterAlex, Потому что, в par файле указываются строки столбцы , время итд. , получается после первых записанных файлов dat и par создаются новые, и во втором par файле немного другие данные, отличающиеся от первого .
0
2 / 2 / 0
Регистрация: 10.07.2014
Сообщений: 102
05.09.2014, 08:57  [ТС]
ViterAlex, ещё нужно сделать одну штуку (я не могу разобраться в CSVProcess.cs ) так вот, нужно чтобы в par файл в структуре под AdcRate записывались данные :
первые две строчки времени и даты (в csv файле) их нужно преобразовать в DataTime как-то , вычитаем одну из другой и делим полученное на 1, вроде правильно описал
0
 Аватар для ViterAlex
8953 / 4865 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
05.09.2014, 11:07
Цитата Сообщение от ked Посмотреть сообщение
первые две строчки времени и даты (в csv файле) их нужно преобразовать в DataTime
ок. Сделаем. Сейчас допиливаю чтение и запись файлов в отдельном потоке
0
2 / 2 / 0
Регистрация: 10.07.2014
Сообщений: 102
05.09.2014, 13:31  [ТС]
ViterAlex, Хорошо, разбирал я этот CSVProcess.cs , практически всё понял, но как написать данное задание опять не могу
0
2 / 2 / 0
Регистрация: 10.07.2014
Сообщений: 102
11.09.2014, 14:14  [ТС]
ViterAlex,
Вложения
Тип файла: rar part_2.rar (5.86 Мб, 5 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.09.2014, 14:14

Сохранение файла в формате txt
Возможно ли используя SaveDialog сохранить файл, и чтобы автоматически этому файлу приписовался тип .txt?

Сохранение файла в bmp формате
Кaк сделaть чтoбы пoсле рисoвaния метoдaми line() и circle() мoжнo былo этo сoхрaнить кaк .БМП фaил????

Сохранение в формате xml
Граждане , нид хелп :) Пилю вывод в xml формате на php из бд Получается норм в просмотре кода в браузере: &lt;?xml...

Сохранение в .exe формате
Добрый вечер! Как сохранить задачу в .exe формате?

Сохранение в формате Excel
Здравствуйте. Имеется таблица значений. Нужно данные из нее записать в файл формата XLS. Способ через COM-объект не хочу. Заметил,...


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

Или воспользуйтесь поиском по форуму:
50
Ответ Создать тему
Новые блоги и статьи
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru