powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / C++ [игнор отключен] [закрыт для гостей] / Заменить запись в файл с txt на xlsx
25 сообщений из 150, страница 1 из 6
Заменить запись в файл с txt на xlsx
    #40046614
xamelione25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите сделать так чтобы запись происходила не в txt, а в Excel

Код: plaintext
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.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
#include<iostream>
#include<conio.h>
#include<locale.h>
#include<math.h>
#include<time.h>
#include<cmath>
#include<fstream>
#include<string>
float tpostyp = 0;//random
float tobrk = 0;//random
float tobrevm = 0;//random
int k = 0;
int t0 = 0;
int emkost = 0;
float lambda = 0.1;
float Xi = 0;
bool KanalSvob = true;
float proizvoditelnost = 0;
float stoimost = 0;
float cena = 1;
float vsignala = 0.01;
float p = 0;

using namespace std;
float FuncPostuplenie_v_kanal_vrem(int regim)
{
	if (regim == 2)
	{
		return tpostyp = 10;
	}
	else
	{
		Xi = 2 + rand() % 6;
		tpostyp = 0.1 * pow(2.71, -0.1 * Xi);
		return tpostyp + 10.0;
	}
}
float FuncObrabotka_v_kanal_vrem(int regim)
{
	if (regim == 2)
	{
		return tobrk = 10;
	}
	else
	{

		Xi = 2 + rand() % 6;
		tobrk = 1 / 1.5 / sqrt(2 * 3.14) * pow(2.71, -(pow(Xi - 10, 2)) / 2 / pow(1.5, 2));
		return tobrk + 10.0;

	}
}
float FuncObrabotka_v_evm_vrem(int regim)
{
	if (regim == 2)
	{
		return tobrevm = 33;
	}
	else
	{
		Xi = 2 + rand() % 6;
		tobrevm = 1 / 3 / sqrt(2 * 3.14) * pow(2.71, -(pow(Xi - 33, 2)) / 2 / pow(3.0, 2));
		return tobrevm + 33.0;
	}
}
float FuncEmkost(int regim)
{
	if (regim == 2)
	{
		return emkost = 4;
	}
	else
	{
		return emkost = 2 + rand() % 6;
	}
}
/*int FuncCountElementinEVM(int *Mass,int N)
{
	int j=0;
	int min=0;
	min=Mass[0];
	for(j=1;j<N;j++)//проход по каждой эвм
	{
		if(Mass[j]<Mass[j-1])//ищем наименьший элемент в очереди эвм
		{
			min=Mass[j];
		}
	}
	return min;
}*/
int main()
{
	int N = 0;
	int reg = 0;
	int j = 0;
	int min = -1;
	int mindex = 0;
	string stroka = "";
	//int **Mass;
	setlocale(LC_ALL, "Russian");
	srand(time(NULL));
	ofstream f1;
	f1.open("log.txt", ios_base::trunc);
	if (f1)
	{
		cout << "Файл успешно открыт для записи в него статистики" << endl;
	}
	cout << "	Введите количество ЭВМ, участвующих в процессе = ";
	cin >> N;//столько будет массивов (очередей)
	f1 << "Всего ЭВМ " << N << endl;
	int* MassEVM = new int[N];
	for (int i = 0; i < N; i++)
	{
		MassEVM[i] = 0;//эвм без сигналов
	}
	int* EmkostEVM = new int[N];//массив емкостей эвм
	for (int i = 0; i < N; i++)
	{
		EmkostEVM[i] = 4;//инициализация
	}
	int* countSignalEVM = new int[N];//сколько сигналов обработала каждая эвм (для статистики)
	for (int i = 0; i < N; i++)
	{
		countSignalEVM[i] = 0;//инициализация
	}
	int countDestroySignal = 0;//сколько сигналов было уничтожено из - за смены емкости эвм
	int* SvobodnostEVM = new int[N];//состояние  емкостей эвм 0 -свободно, 1-работает
	for (int i = 0; i < N; i++)
	{
		SvobodnostEVM[i] = 0;//инициализация
	}
	int* TimerEVM = new int[N];//Таймер на каждой ЭВМ, отвечающий за обработку сигнала
	for (int i = 0; i < N; i++)
	{
		TimerEVM[i] = 0;//инициализация
	}

	int buffer = 10000;
	cout << "Введите режим работы генератора 1- случайно, 2 - постоянно" << endl;
	cin >> reg;
	//cout<<"что вернула функция "<<FuncObrabotka_v_kanal_vrem(reg);
	float time1 = 0;
	float time2 = 0;
	float time3 = 0;
	float tend1 = 0;
	float tend2 = 0;
	float* tend3 = new float[N];
	for (int i = 0; i < N; i++)
	{
		tend3[i] = 0;
	}
	bool flag = true;
	bool newsignal = false;
	bool flagkanal = true;
	int* flagevm = new int[N];
	for (int i = 0; i < N; i++)//0 - свободная, 1 - обрабатывает
	{
		flagevm[i] = 0;
	}
	//while сам процесс
	do
	{
		t0 = t0 + 1;

		if (KanalSvob == true)//проверка на свободность канала
		{
			if (flagkanal == true)
			{
				tend1 = t0 + (time1 = FuncPostuplenie_v_kanal_vrem(reg));
				flagkanal = false;
			}
			//if(t0<tend1)//поступение в канал
			//{
			KanalSvob = false;
			//f1<<"Прошло"<<t0<<" мск"<<"Канал"<<KanalSvob<< "Сигнал обрабатывается в канале и не поступал в ЭВМ"<<endl;
		//}
		}
		else
		{

			if (buffer != 0)//если в буфере есть место, заносим сигнал в него
			{

				buffer--;//буфер уменьшен на величину сигнала
			}
		}
		//начало обработки сигнала в канале
		if (KanalSvob == false)//значит в канале есть сигнал
		{
			if (flag == true)
			{
				tend2 = t0 + (time2 = FuncObrabotka_v_kanal_vrem(reg));
				flag = false;
			}

			if (t0 < tend2)
			{

				//идет обработка сигнала
			}
			else
			{

				k++;//увеличиваем счетчик количества обработанных сигналов на 1
				newsignal = true;
				f1 << "Прошло " << t0 << " мск " << " Канал " << KanalSvob << " Из канала вышел новый сигнал. Всего сигналов обработано в канале = " << k << endl;
				if (t0 >= tend1)
				{
					KanalSvob = true;
					flag = true;
					flagkanal = true;
					buffer++;//берем из буфера следующий необработанный сигнал и освобождаем место

				}
			}

		}
		//поступление в ЭВМ
		if ((k != 0) && (newsignal == true))
		{
			//min=FuncCountElementinEVM(MassEVM,N); //ищем ЭВМ с наименьшей занятостью
			min = MassEVM[0];
			mindex = 0;
			for (j = 1; j < N; j++)//проход по каждой эвм
			{
				if (MassEVM[j] < min)//ищем наименьший элемент в очереди эвм
				{
					min = MassEVM[j];///////!!!!!
					mindex = j;
				}

			}
			//cout<<"минимальный элемент равен"<<min;
			MassEVM[mindex] = MassEVM[mindex] + 1;//добавляем сигнал в очередь на обработку ЭВМ


			if (MassEVM[mindex] > 0)//если машина обрабатывает сигнал, то её емкость не меняем
			{
				SvobodnostEVM[mindex] = 1;
				time3 = FuncObrabotka_v_evm_vrem(reg);
				TimerEVM[mindex] = time3;//Заводим таймер для выбранной ЭВМ
			}
		}
		//сама обработка
		for (int j = 0; j < N; j++)
		{
			if ((flagevm[j] == 0) && (newsignal == true))
			{
				tend3[j] = t0 + TimerEVM[j];
				flagevm[j] = 1;
				newsignal = false;
			}
			if (t0 <= tend3[j])
			{
				//сигнал еще обрабатывается
				f1 << "Прошло " << t0 << " мск" << "Канал " << KanalSvob << " Сигнал обрабатывается в " << j + 1 << " ЭВМ" << endl;
				for (int index = 0; index < N; index++)
				{
					if (SvobodnostEVM[index] == 0)//если ЭВМ не работает, то изменяем её емкость
					{
						EmkostEVM[index] = FuncEmkost(reg);
						countDestroySignal = countDestroySignal + MassEVM[index];
						MassEVM[index] = 0;//очищаем очередь ЭВМ, т.к была изменена её ёмкость
					}
				}
			}
			else
			{
				for (int index3 = 0; index3 < N; index3++)//SvobodnostEVM[j]=0;
				{
					if ((t0 > tend3[index3]) && (tend3[index3] > 0) && (SvobodnostEVM[index3] == 1))//вм закончила обработку
					{
						if (flagevm[index3] == 1)
						{
							SvobodnostEVM[index3] = 0;
							countSignalEVM[index3] = countSignalEVM[index3] + 1;//увеличиваем счетчик количесва обработанных ЭВМ сигналов
							f1 << "Прошло " << t0 << " мск" << "Сигнал обработался в " << index3 + 1 << " ЭВМ" << endl;
							TimerEVM[index3] = 0;//обнуляем таймер ЭВМ, которая закончила свою работу
							flagevm[index3] = 0;
						}
					}

				}
			}
		}
		if (min == -1)
		{
			f1 << "Прошло " << t0 << " мск " << " Канал " << KanalSvob << " Сигнал обрабатывается в канале и не поступал в ЭВМ" << endl;
		}
		else
		{
			//f1<<"Прошло "<<t0<<" мск"<<"Канал"<<KanalSvob<< "Сигнал обрабатывается в"<<min<<" ЭВМ"<<endl;
		}
	} while ((k < 1000) && (buffer != 0));//k=1000
	cout << "Запись в файл завершена" << endl;
	int signalovobr = 0;
	f1 << "Прошло " << t0 << " мск " << " Канал " << KanalSvob << " Обработка завершена. Обработано сигналов каждой ЭВМ:" << endl;
	for (int index = 0; index < N; index++)
	{
		f1 << "ЭВМ № " << index + 1 << " " << countSignalEVM[index] << endl;
		signalovobr = signalovobr + countSignalEVM[index];
	}

	f1 << "В результате изменения емкости ЭВМ было уничтожено " << countDestroySignal << " сигналов" << endl;
	proizvoditelnost = float(k) / float(t0);
	stoimost = signalovobr * cena;
	p = emkost / vsignala / k;
	f1 << "Производительность системы = " << proizvoditelnost << " сигналов / мск " << endl;
	f1 << "Стоимость обработки сигналов  в ЭВМ = " << stoimost << " руб." << endl;
	f1 << "Вероятность переполнения накопителя = " << p << endl;
	f1.close();
	system("Pause");
	//delete MassEVM;
	//delete SvobodnostEVM;
	//delete TimerEVM;
	//delete countSignalEVM;
}

...
Рейтинг: 0 / 0
Заменить запись в файл с txt на xlsx
    #40046623
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В простейшем случае ты можешь переименовать расширение в СSV

Код: plaintext
1.
f1.open("log.csv", ios_base::trunc);



И логфайл привести к табличному виду с разделителями например ";".

И это Excel должен открыть как табличку.
...
Рейтинг: 0 / 0
Заменить запись в файл с txt на xlsx
    #40046625
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*.xslx это xml в zip-архиве. Пишешь в xml, затем пакуешь.
Структура xml тут описана .
...
Рейтинг: 0 / 0
Заменить запись в файл с txt на xlsx
    #40046626
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xamelione25f1.open("log.txt", ios_base::trunc);
Вот в этой строчке надо ".txt" заменить на ".xlsx".

Ну или читать спецификацию xlsx и переделывать весь вывод согласно ней.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Заменить запись в файл с txt на xlsx
    #40046627
xamelione25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Dima T,

mayton

гляньте тут, я там писал более подробнее о проблеме с которой я столкнулся
Модератор: Нет. Мы не будем ходить в другие форумы. Это - модераторский совет.
...
Рейтинг: 0 / 0
Заменить запись в файл с txt на xlsx
    #40046638
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xamelione25,

Записывай всё в tsv и не делай себе голову. \t - разделитель полей, \n - строк. Табы в строках меняй на что-нибудь.
...
Рейтинг: 0 / 0
Заменить запись в файл с txt на xlsx
    #40046643
xamelione25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crutchmaster, Dimitry Sibiryakov, mayton,

да я уже с csv все решил ... спс))

единственное подскажите как сделать по конечным границам заполненных ячеек в икселе ... по окончанию записи в него ... в csv формате ... выделение всех границ ячеек входящих в этот диапазон

ну например вот так
...
Рейтинг: 0 / 0
Заменить запись в файл с txt на xlsx
    #40046677
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xamelione25,
В коде надо?
- вкл записи макроса
- выделить
- посмотреть полученный код макроса.
...
Рейтинг: 0 / 0
Заменить запись в файл с txt на xlsx
    #40046689
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
xamelione25,

Записывай всё в tsv и не делай себе голову. \t - разделитель полей, \n - строк. Табы в строках меняй на что-нибудь.

Никогда не понимал этот формат. Табы на просмотре текста выглядят ужасно. Сложно
понять - где пробел в данных а где разделитель. Чтоб трабл-шутить нужно смотреть
вооруженным глазом через hex-editor или среду с подсветкой управляющих символов.
...
Рейтинг: 0 / 0
Заменить запись в файл с txt на xlsx
    #40046693
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТабы на просмотре текста выглядят ужасно.

Отлично выглядит если
1) Данные примерно одинаковой длины;
2) Длина не близка в кратности таба.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Заменить запись в файл с txt на xlsx
    #40046695
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
crutchmaster
xamelione25,

Записывай всё в tsv и не делай себе голову. \t - разделитель полей, \n - строк. Табы в строках меняй на что-нибудь.

Никогда не понимал этот формат. Табы на просмотре текста выглядят ужасно. Сложно
понять - где пробел в данных а где разделитель. Чтоб трабл-шутить нужно смотреть
вооруженным глазом через hex-editor или среду с подсветкой управляющих символов.

Не надо фигней заниматься, открыл в экселе и смотри. CSV намного хуже, где разделитель сам печатный символ, который может содержаться в данных.
...
Рейтинг: 0 / 0
Заменить запись в файл с txt на xlsx
    #40046698
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот за что люблю наш форум... Архитекторы сцепились за сплиттер.
...
Рейтинг: 0 / 0
Заменить запись в файл с txt на xlsx
    #40046801
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По сабжу. Если сплиттер == запятая, все нормально экранируется кавычками. И сами кавычки тоже.

Код: plaintext
1.
2.
3.
4.
"Timestamp,Message"
2021-02-18T16:31:14.417069,"Fucken comma ',' in value"
2021-02-18T16:31:14.4260667,Fucken tab 	 in value
2021-02-18T16:31:14.4260667,"Fucken ""quoted literal"" in value"



Ну а табулятор - невидимка. Вот такие дела.
...
Рейтинг: 0 / 0
Заменить запись в файл с txt на xlsx
    #40046847
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

>Ну а табулятор - невидимка. Вот такие дела.
Та мы туда и не смотрим)))
...
Рейтинг: 0 / 0
Заменить запись в файл с txt на xlsx
    #40046887
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Вот за что люблю наш форум... Архитекторы сцепились за сплиттер.

Ты теоретик, а мы практики, нае... с этим
...
Рейтинг: 0 / 0
Заменить запись в файл с txt на xlsx
    #40046890
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы, практики наверное ничего больше 1 Гига в CSV не грузили в БД.

А я - грузил. И в Excel такой файл не открывался. Вот такие пироги.
...
Рейтинг: 0 / 0
Заменить запись в файл с txt на xlsx
    #40046894
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Вы, практики наверное ничего больше 1 Гига в CSV не грузили в БД.

А я - грузил. И в Excel такой файл не открывался. Вот такие пироги.

Ты же не админ, код писать умеешь, зачем тут эксель вообще непонятно.

У меня трижды в день качается 6-8 Гб, превращаю в БД размером 2 Гб, на все 40 минут уходит.
...
Рейтинг: 0 / 0
Заменить запись в файл с txt на xlsx
    #40046896
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм.... 8 Гигабайт за 40 минут. Это приблизительно 204 Мб в минуту или 3.4 Мб в секунду.

Медленно-ва-то... Для современных носителей и сетей. Хотя чорт его знает. Вангую что I/O небыстрый.
...
Рейтинг: 0 / 0
Заменить запись в файл с txt на xlsx
    #40046897
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xamelione25,

автор ну что? У тебя получилось CSV открыть в Excel?
...
Рейтинг: 0 / 0
Заменить запись в файл с txt на xlsx
    #40046898
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Вангую что I/O небыстрый.

Небыстрый FoxPro, на котором все написано. Но производительность всех устраивает
...
Рейтинг: 0 / 0
Заменить запись в файл с txt на xlsx
    #40046899
xamelione25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,
да, открылся...
...
Рейтинг: 0 / 0
Заменить запись в файл с txt на xlsx
    #40046901
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фокс - хорошая штука. Уважаю. У них интересный тип индекса был. Какой-то там rush.
И на сравнительных тестах если сравнивать dBase vs Fox, то последний выигрывал когда
были запросы специфичны к этому рашу. Интересно Microsoft перенёс это ноу-хау в MS-SQL?

Кто есть MS-SQL-щики? Проясните plz.
...
Рейтинг: 0 / 0
Заменить запись в файл с txt на xlsx
    #40046902
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
У них интересный тип индекса был. Какой-то там rush.

Без детализации.
Имхо, маркетинговый шит.
...
Рейтинг: 0 / 0
Заменить запись в файл с txt на xlsx
    #40046909
bk0010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Фокс - хорошая штука. Уважаю. У них интересный тип индекса был. Какой-то там rush.
И на сравнительных тестах если сравнивать dBase vs Fox, то последний выигрывал когда
были запросы специфичны к этому рашу. Интересно Microsoft перенёс это ноу-хау в MS-SQL?
Кто есть MS-SQL-щики? Проясните plz.
Технология Rushmore. То ли сжатые индексы, то ли bitmap (не помню). Подробности тут , искать слово Rushmore.
...
Рейтинг: 0 / 0
Заменить запись в файл с txt на xlsx
    #40046910
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А.. точно.
...
Рейтинг: 0 / 0
25 сообщений из 150, страница 1 из 6
Форумы / C++ [игнор отключен] [закрыт для гостей] / Заменить запись в файл с txt на xlsx
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]