С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.82/34: Рейтинг темы: голосов - 34, средняя оценка - 4.82
 Аватар для Stick
4 / 4 / 1
Регистрация: 26.11.2009
Сообщений: 156

Обработка больших объемов данных из Excel

20.12.2016, 23:31. Показов 6734. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемые форумчане!
Есть огромных размеров excel файл, пусть для простоты, в нем хранятся сведения о погоде: дата, температура в этот день (разница между измерениями 10 минут). Встала задача написания на C# программы которая будет:
1) считывать сведения из файла и представлять их в табличном виде;
2) оперировать данными: искать среднее значение в такой-то день и т.п. не важно;
3) создавать новую таблицу с обработанными данными и сохранять её в новом excel файле;
Опционально:
4) хранить обработанные данные в виде БД.

Прочёл где-то на форуме, что обращаться к excel можно с OLE (но сейчас с этой технологией напрямую мало кто работает). Мне не ясно с помощью какого аппарата можно добиться достойного результата.

Если получиться вытащить данные из файла, то каким образом хранить этот огромный набор информации в программе - как много памяти она будет поглощать? как оптимизировать работу? м.б. используя динамические списки, то какая структура оптимальна?

Как быть с БД? тут мне совсем не понятно что делать.

Надеюсь на вашу помощь! Спасибо!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.12.2016, 23:31
Ответы с готовыми решениями:

Шифрование больших объемов данных
Здравствуйте. Имеются данные (файлы различных форматов) суммарным весом около 20 гигабайт. Задача зашифровать их максимально быстро, и...

Сохранение больших объемов данных в файл
Народ подскажите, может есть у кого идеи. У меня программа, с таблицей на 3,5-4 млн строк по 14-20 полей в каждой строке (поля...

Хранение больших объемов данных в файлах.
Добрый день. Столкнулся с проблемой необходимо хранить и обработывать большое количество массивов, решил что эфферктивно создать в...

25
Эксперт .NET
 Аватар для Usaga
14103 / 9320 / 1349
Регистрация: 21.01.2016
Сообщений: 35,016
21.12.2016, 06:35
Stick, работать с EXCEL действительно можно через OLEDB. В таком случае документ будет представлен базой данных с ограниченным функционалом. Драйвер для OLEDB идёт в комплекте с офисным пакетом. Не знаю, можно ли его отдельно поставить. Скорее всего да.

Можно работать с XLSX-документом напрямую, без всяких драйверов и офисов. Одна из популярных библиотек по этой теме - OpenXML SDK. В отличие от OLEDB данная библиотека даёт тебе полный контроль над документом.

Цитата Сообщение от Stick Посмотреть сообщение
как много памяти она будет поглощать? как оптимизировать работу?
Поглощать программа будет некоторое количество памяти, плюс-минус несколько мегабайт. Зависит исключительно от того, что и как ты наваяешь. Оптимизировать нужно будет только то, что будет этого требовать.
0
 Аватар для Stick
4 / 4 / 1
Регистрация: 26.11.2009
Сообщений: 156
21.12.2016, 12:02  [ТС]
Спасибо! А OpenXML SDK не умеет работать с xls файлами? Все хранится в этом формате.
0
Эксперт .NET
 Аватар для Usaga
14103 / 9320 / 1349
Регистрация: 21.01.2016
Сообщений: 35,016
21.12.2016, 12:39
Нет, не умеет. Если есть возможность, то перегони в XLSX.
0
 Аватар для Stick
4 / 4 / 1
Регистрация: 26.11.2009
Сообщений: 156
21.12.2016, 13:32  [ТС]
Хорошая мысль, есть ли какие-нибудь библиотеки позволяющие преобразовывать к XLSX формату?
0
Эксперт .NET
 Аватар для Usaga
14103 / 9320 / 1349
Регистрация: 21.01.2016
Сообщений: 35,016
21.12.2016, 13:39
Stick, я таких не знаю. Если операция разовая, то можно самому, в офисе (или LibreOffice) перегнать. Иначе искать библиотеку для работы со старым форматом XLS.
0
 Аватар для Stick
4 / 4 / 1
Регистрация: 26.11.2009
Сообщений: 156
22.12.2016, 21:35  [ТС]
Usaga, пожалуй, пока раздерусь с xlsx типом. Благодарю!
Если предположить, что в excel-файле есть группа ячеек, образующие шапку таблицы (в идеале она не меняется). Но эта шапка может находиться в каждом документе на разном месте. Есть ли в OpenXML SDK функции для поиска конкретной записи по документу? Про OpenXML SDK можно почитать только на microsoft.com? Есть ли на русском справочники?
0
Эксперт .NET
 Аватар для Usaga
14103 / 9320 / 1349
Регистрация: 21.01.2016
Сообщений: 35,016
23.12.2016, 05:34
Stick, OpenXML SDK - крайне низкоуровневая библиотека, в ней нет поиска по документу. Есть только доступ ко всему его содержимому (а его содержимое - XML), его структуре, стилям.

Справочники на русском не искал, да и вряд ли они существуют. Не настолько эта библиотека востребована широкой аудиторией, чтобы озадачиваться переводом её документации. Кому надо, спокойно на английском прочитают.
0
83 / 61 / 17
Регистрация: 21.08.2015
Сообщений: 1,094
23.12.2016, 14:52
Держи код для работы с XLS, он не совсем оптимальный, но лишнее можно убрать.

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
using Microsoft.Office.Interop;
using System;
using System.IO;
using Excel = Microsoft.Office.Interop.Excel;
//Добавить пакет Microsoft Office Interop из NuGet 
namespace ns_Read_files
{
    class cl_Read_files
    {
        public static void Read_file_xls()
        {
            string lpath = @"C:\\PROJECTS\\C-Sharp\\Wpf_test\\Wpf_test\in";
 
            DirectoryInfo Dir_in = new DirectoryInfo(lpath);
 
            string lxls_file_name = "";
            int koll_file = 0;
            foreach (var fi in Dir_in.EnumerateFiles("*.xls?"))
            {
                koll_file++;
                lxls_file_name = fi.Name;
                //Console.WriteLine(fi.Name);
            }
 
            lpath = lpath + lxls_file_name;
 
            Excel.Application excelapp = new Excel.Application();
            excelapp.Visible = false; //Скрываем окно EXCEL
 
            //Получаем набор ссылок на объекты Workbook (на созданные книги)
            Excel.Workbooks excelappworkbooks = excelapp.Workbooks;
 
            //Открываем книгу и получаем на нее ссылку excelappworkbook =
            excelapp.Workbooks.Open(lpath,
            Type.Missing, Type.Missing, Type.Missing, Type.Missing,
            Type.Missing, Type.Missing, Type.Missing, Type.Missing,
            Type.Missing, Type.Missing, Type.Missing, Type.Missing,
            Type.Missing, Type.Missing);
 
            //Получаем ссылку на книгу 1 - нумерация от 1
            Excel.Workbook excelappworkbook = excelappworkbooks[1];
 
            Excel.Sheets excelsheets = excelappworkbook.Worksheets;
            //Получаем ссылку на лист 1
            Excel.Worksheet excelworksheet = (Excel.Worksheet)excelsheets.get_Item(1);
 
            //Выбираем ячейку для вывода A1
            Excel.Range excelcells;
 
 
            //string sStr = Convert.ToString(excelcells.Value2);
 
            int i = 13;
            string A, B, G, H, I, J;
            do
            {
 
                excelcells = excelworksheet.get_Range("A" + i, Type.Missing);
 
                A = Convert.ToString(excelworksheet.get_Range("A" + i, Type.Missing).Value2);
                B = Convert.ToString(excelworksheet.get_Range("B" + i, Type.Missing).Value2);
                G = Convert.ToString(excelworksheet.get_Range("G" + i, Type.Missing).Value2);
                H = Convert.ToString(excelworksheet.get_Range("H" + i, Type.Missing).Value2);
                I = Convert.ToString(excelworksheet.get_Range("I" + i, Type.Missing).Value2);
                J = Convert.ToString(excelworksheet.get_Range("J" + i, Type.Missing).Value2);
 
                //li_coll_xls.Add(new cl_Model_for_xls(A, B, G, H, I, J));
 
                i++;
 
            } while (excelcells.Value2 != null);
 
 
            //Закрываем без сохранения 
            excelapp.Quit();
            //MessageBox.Show("Ready!");
        }
    }
}
Всю инфу взял от сюда http://wladm.narod.ru/C_Sharp/comexcel.html
0
 Аватар для Stick
4 / 4 / 1
Регистрация: 26.11.2009
Сообщений: 156
26.12.2016, 15:43  [ТС]
Usaga, так и думал.

Чипс, спасибо, в начале поисков тоже обратил на этот сайт внимание - очень информативен!

Если использовать в своей программе OLEDB для работы с xls файлами нужно покупать лицензию разработчика у MS для работы с офисом? и опять же для работы с проектом в VS 2013 / VS 2015 Community нужна лицензия разработчика?
Как понимаю для OpenXML SDK не нужно приобретать никаких лицензий?
0
Эксперт .NET
 Аватар для Usaga
14103 / 9320 / 1349
Регистрация: 21.01.2016
Сообщений: 35,016
26.12.2016, 15:58
Stick, OLEDB не требует лицензий. Если оно может работать без офиса (который покупать нужно, естественно), то оно бесплатно. OpenXML SDK - халява чистой воды.
0
 Аватар для Stick
4 / 4 / 1
Регистрация: 26.11.2009
Сообщений: 156
10.01.2017, 12:57  [ТС]
Usaga, Можете помочь? Читаю текст из xlsx-файла. дана таблица в виде:
|№№|Описание|
| Пункт 1 |
| 1,1 | Текст |
| 1,2 | Текст |
| Пункт 2 |
| 2,1 | Текст |
| 2,2 | Текст |
| 2,3 | Текст |
| Пункт 3 |
| 3,1 | Текст |
| 3,2 | Текст |
|3.2.1| Текст | // тут точки
|3.2.2| Текст |
| 3,3 | Текст | // дальше запятые

...

Формирую список строк, читаю ячейки в строке (функция ReadExcel). Но при чтении номера cell.value = 1.1000000000000001 вместо 1.1.
Следующее значение читается как 1.2.
Дальше не 2.2, а 2.2000000000000002;
2.2999999999999998 вместо 2.3 и периодически возникают такие числа.

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
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
namespace ExcelRead_ver_0.1.8
{
    public static class ReadTZExcel
    {
        public static void XLReadTZ(FileStream fileStream, ref DataTable tableScenarios)
        {
            SLExcelData mExcelData = new SLExcelData();
            mExcelData = ReadExcel(fileStream, ref tableScenarios);            
        }
 
        private static string GetColumnName(string cellReference)
        {
            var regex = new Regex("[A-Za-z]+");
            var match = regex.Match(cellReference);
 
            return match.Value;
        }
 
        private static int ConvertColumnNameToNumber(string columnName)
        {
            var alpha = new Regex("^[A-Z]+$");
            if (!alpha.IsMatch(columnName)) throw new ArgumentException();
 
            char[] colLetters = columnName.ToCharArray();
            Array.Reverse(colLetters);
 
            var convertedValue = 0;
            for (int i = 0; i < colLetters.Length; i++)
            {
                char letter = colLetters[i];
                int current = i == 0 ? letter - 65 : letter - 64; // ASCII 'A' = 65
                convertedValue += current * (int)Math.Pow(26, i);
            }
 
            return convertedValue;
        }
 
        private static string ReadExcelCell(Cell cell, WorkbookPart workbookPart)
        {
            var cellValue = cell.CellValue;
            var text = (cellValue == null) ? cell.InnerText : cellValue.Text;
            if ((cell.DataType != null) && (cell.DataType == CellValues.SharedString))
            {
                text = workbookPart.SharedStringTablePart.SharedStringTable.Elements<SharedStringItem>().ElementAt(
                        Convert.ToInt32(cell.CellValue.Text)).InnerText;
            }
 
            return (text ?? string.Empty).Trim();
        }
 
        private static IEnumerator<Cell> GetExcelCellEnumerator(Row row)
        {
            int currentCount = 0;
            foreach (Cell cell in row.Descendants<Cell>())
            {
                string columnName = GetColumnName(cell.CellReference);
 
                int currentColumnIndex = ConvertColumnNameToNumber(columnName);
 
                for (; currentCount < currentColumnIndex; currentCount++)
                {
                    var emptycell = new Cell() { DataType = null, CellValue = new CellValue(string.Empty) };
                    yield return emptycell;
                }
 
                yield return cell;
                currentCount++;
            }
        }
 
        public static SLExcelData ReadExcel(FileStream file, ref DataTable tableScenarios)
        {
            var data = new SLExcelData();
 
            // Открыть excel документ
            WorkbookPart workbookPart; List<Row> rows;
            try
            {
                var document = SpreadsheetDocument.Open(file, false);
                workbookPart = document.WorkbookPart;
 
                var sheets = workbookPart.Workbook.Descendants<Sheet>();
                var sheet = sheets.First();
                data.SheetName = sheet.Name;
 
                var workSheet = ((WorksheetPart)workbookPart.GetPartById(sheet.Id)).Worksheet;
                var columns = workSheet.Descendants<Columns>().FirstOrDefault();
                data.ColumnConfigurations = columns;
 
                var sheetData = workSheet.Elements<SheetData>().First();
                rows = sheetData.Elements<Row>().ToList();
            }
            catch (Exception e)
            {
                data.Status.Message = "Unable to open the file";
                return data;
            }
 
            // Прочитать заголовок
            int columnsCount = 0; // Получили колонок в таблице
            if (rows.Count > 0)
            {
                var row = rows[0];
                var cellEnumerator = GetExcelCellEnumerator(row);
                while (cellEnumerator.MoveNext())
                {
                    var cell = cellEnumerator.Current;
                    var text = ReadExcelCell(cell, workbookPart).Trim();
                    if (text == "") continue;
                    data.Headers.Add(text);
                    tableScenarios.Columns.Add(text);
                    columnsCount++;
                }
            }
 
            // Прочитать данные
            if (rows.Count > 1)
            {
                string[] rowText = new string[columnsCount];
 
                for (var i = 1; i < rows.Count; i++)
                {
                    var dataRow = new List<string>();
                    data.DataRows.Add(dataRow);
                    var row = rows[i];
                    if (row.InnerText == "") break;
 
                    var cellEnumerator = GetExcelCellEnumerator(row);
                    int tmpCount = 0;
                    while (cellEnumerator.MoveNext())
                    {
                        var cell = cellEnumerator.Current;
                        var text = ReadExcelCell(cell, workbookPart).Trim();
                        dataRow.Add(text);
                        if (((text == "")&&(tmpCount==0)))
                            continue;
 
                        rowText[tmpCount] = text;
                        tmpCount++;
                    }
                    tableScenarios.Rows.Add(rowText);
                    Array.Clear(rowText, 0, rowText.Length);
                }
            }
            return data;
        }
 
    }
}
0
Эксперт .NET
 Аватар для Usaga
14103 / 9320 / 1349
Регистрация: 21.01.2016
Сообщений: 35,016
10.01.2017, 13:03
Stick, это нормально. Числа в таком виде и хранятся в документе, просто EXCEL их при выводе округляет. Если ты посмотришь в каком виде там временные промежутки хранятся, то у тебя вообще глаз выпадет

А вообще, доверять вещественным числам в программировании нельзя, ибо всегда имеет место погрешность.
0
 Аватар для SharpDeveloper
141 / 138 / 22
Регистрация: 16.02.2012
Сообщений: 453
10.01.2017, 13:13
Если не нужно наличие офиса на компе, то можно попробовать библиотеку https://github.com/tonyqus/npoi
Работает шустро, не требует установленного Excel, читает xls и xslx.
0
 Аватар для Stick
4 / 4 / 1
Регистрация: 26.11.2009
Сообщений: 156
10.01.2017, 13:50  [ТС]
Usaga, тут я запутался. а как же ошибки округления и точность? Если задача требует точных вычислений, как происходит округление? Мне в данном случае как быть чтобы не потерять в точности. У меня все прочитанные данные возвращаются как строки. Как тогда преобразовать строку в число и не потерять точность при этом?

SharpDeveloper, С этой библиотекой работать нужно через OleDb?
0
Эксперт .NET
 Аватар для Usaga
14103 / 9320 / 1349
Регистрация: 21.01.2016
Сообщений: 35,016
10.01.2017, 14:00
Stick, ошибки округления будут всегда. Без вариантов. Для меньшей погрешности нужно выбирать наиболее точный тип, с большей размерностью. Для хитрых на голову товарищей (учёные, инженеры, финансисты) должны быть сторонние библиотеки реализующие вычисления с плавающей точкой заданной точности. Но в большинстве случаев это не нужно.

Цитата Сообщение от Stick Посмотреть сообщение
Как тогда преобразовать строку в число и не потерять точность при этом?
Никак. Почитай про стандарт IEEE754. Максимум, на что можно надеяться, что погрешность будет мала и в глаза не бросится.
0
83 / 61 / 17
Регистрация: 21.08.2015
Сообщений: 1,094
10.01.2017, 14:46
Stick вы лучше скажите, у вас получилось как нибудь все это сохранить ? =)
0
 Аватар для Stick
4 / 4 / 1
Регистрация: 26.11.2009
Сообщений: 156
10.01.2017, 15:13  [ТС]
Чипс, как сохранять буду думать на следующей неделе . Сейчас задача все правильно вытащить из файлов.
Про Open XML на https://msdn.microsoft.com/RU-... 50837.aspx есть много инфы. А на рутрекере "OpenXML кратко и доступно" на русском описывается структура Excel, Word, PowerPoint.
0
 Аватар для SharpDeveloper
141 / 138 / 22
Регистрация: 16.02.2012
Сообщений: 453
10.01.2017, 15:33
Цитата Сообщение от Stick Посмотреть сообщение
SharpDeveloper, С этой библиотекой работать нужно через OleDb?
Нет, работа как с обычными объектами .NET, вот простой пример загрузки xml в DataTable:
https://github.com/tonyqus/npo... e/Form1.cs
Для быстрого чтения и парсинга текстовых данных из Excel это отличный вариант.

Добавлено через 8 минут
Добавлю немного примеров как открывать файлы с этой библиотекой:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
        internal void ImportFromExcel2003(string filePath)
        {
            HSSFWorkbook workbook;
            using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
            {
                workbook = new HSSFWorkbook(file);
            }
            //work with workbook
        }
 
        internal void ImportFromExcel2007(string filePath)
        {
            XSSFWorkbook workbook;
            using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
            {
                workbook = new XSSFWorkbook(file);
                //work with workbook
            }
        }
Или универсально через интерфейс IWorkbook:
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
using NPOI.SS.UserModel;
 
    internal static class ExcelUtils
    {
        static readonly List<string> _supportedFormats = new List<string>()
        {
            ".xls", ".xlsx"
        };
 
        internal static IWorkbook OpenWorkbook(string filePath)
        {
            string ext = Path.GetExtension(filePath);
            if (!_supportedFormats.Contains(ext, StringComparer.InvariantCultureIgnoreCase))
            {
                throw new Exception("Тип документа не поддерживается");
            }
 
            IWorkbook workbook;
            using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
            {
                workbook = WorkbookFactory.Create(file);
            }
 
            return workbook;
        }
    }
1
 Аватар для Stick
4 / 4 / 1
Регистрация: 26.11.2009
Сообщений: 156
11.01.2017, 11:46  [ТС]
Usaga, Благодарю за рекомендацию почитать стандарт. Про грязный ноль не знал .
SharpDeveloper, Огромное спасибо! Удивительно, но пример все прочитал из файла!

Такой вопрос: у меня есть шапка таблицы, в которой заголовки в несколько ячеек объединены (A1:A3,B1:B3,C1:C3). Есть ли мысли как вытащить эту шапку и перенести её в DataGridView?

Добавлено через 18 часов 56 минут
Usaga, добрый день! Вы может быть в курсе дела: у меня есть строка в которой хранятся все ячейки. Так вот, чтобы узнать пуста ли строка в open XML SDK есть какой-нибудь способ? или же нужно перебирать каждую ячейку и смотреть ее содержимое?
Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.01.2017, 11:46
Помогаю со студенческими работами здесь

Задача об оптимизации хранении больших объемов строк
Приветствую. Вопрос на тему &quot;а как лучше?&quot;. Храню строки, далее данные. Есть данные уже собранные, хранящиеся в txt, и данные, которые...

HttpWebRequest, расход памяти непомерно больших объемов и , как следствие, утечка памяти
Добрый вечер. Мне была поставлена такая задача. Написать приложение, которая загружает из списка ссылки с сайта и ищет там определенную...

Обработка больших объемов данных
Всем привет. Мне нужно обработать много много строк таблицы, фильтруя их по столбцам. Начну пожалуй сразу с примера. Пример...

Spring обработка больших объемов данных
Опишу задачу, прошу подсказки куда смотреть. Надо обработать большое количество данных как можно быстрее и эффективнее. Задача скорее...

Хранение больших объемов данных
Всем доброго времени суток и всех с Праздником Победы!)) Сразу к делу) Есть программа (точнее сайт на ASP.NET), есть таблица с данными...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru