Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
4 / 1 / 0
Регистрация: 17.03.2021
Сообщений: 26
Excel

Как в большом текстовом файле записанного одной очень длинной строкой с кодировкой utf-8 найти и заменить текст?

26.02.2024, 12:34. Показов 3507. Ответов 42
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемые знатоки VBA.
Я не программист, но приходится иногда «с книжкой на коленках». В 1990-м году чуть-чуть ознакомительно изучал возможности Turbo Pascal 5.0 для персональных ЭВМ. Вот уж не думал, что после 50 лет придется ещё и VBA изучать. Но, как говориться: «Век живи - век учись...» и «Дорогу осилит идущий».

Раньше, из других подобных файлов начинающихся строкой <?xml version="1.0" encoding="utf-8" standalone="no"?> в Microsoft Excel 2010 я построчно считывал строку String в ячейки Excel, обрабатывал и обратно построчно записывал их в файл. Но теперь столкнулся с тем, что файл около 70 Килобайт записан одной очень длинной строкой, которая не помещается в ячейку. В некоторых функциях обработки строк которыми я пользовался раньше есть ограничение по длине строк String.

Помогите, пожалуйста.

Напишите пример Sub, как в приложенном фале "ШаблонТранспортнойНакладной_001.fp3 " заменить строку
"{№_Заказа}" на "12345/19-24",
"{ФИО_Водителя}" на "Иванов И. И. ",
"{Цифрами_кг}" на "12345 кг." и т.д.

Дальше я сам буду пробовать. Предполагаю, что данные строки что искать: "{№_Заказа}" будет в ячейке Excel «A1», а на что заменить "12345/19-24" будет в ячейке Excel «B1» и т.д.

Пожалуйста, в Sub явно объявите переменные, так как включена «option explicit». Буду очень благодарен, если к коду будут хоть маленькие «пояснялочки» или ссылки где об этом можно почитать более подробно ведь я не программист. Предполагаю, что в будущем мне еще не раз придется столкнуться с подобными файлами.

По правилам форума прикрепленный файл *.fp3 переименован в *.doc "ШаблонТранспортнойНакладной_001.doc " пожалуйста переименуйте его в *.fp3 самостоятельно.

Используется: Windows 7 – 64, Microsoft Excel 2010
Буду благодарен за любую помощь.
Вложения
Тип файла: doc ШаблонТранспортнойНакладной_001.doc (75.5 Кб, 36 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.02.2024, 12:34
Ответы с готовыми решениями:

Заменить каждую букву на цифру в большом текстовом файле
Есть тяжелый(около гига) .txt с значениями к примеру: ('Hellow world', 'How are you', 'Sunday') Как мне его обработать так,...

Найти номер последнего максимального элемента массива, записанного в текстовом файле
Задание 1 Дан текстовый файл input.txt, который в первой строке содержит количество элементов одномерного массива, а во второй строке...

Найти длину самой длинной строки в текстовом файле.
Имеется текстовый файл.Найти длину самой длинной строки.

42
4 / 1 / 0
Регистрация: 17.03.2021
Сообщений: 26
28.02.2024, 23:59  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Zeag Посмотреть сообщение
AI можно без установки, просто распаковать и как портативный использовать.
Спасибо за хорошую идею! Я как-то про это забыл. А с сисадминами, я думаю, можно будет договориться после проверок *.exe антивирусом и т.д.!
0
933 / 366 / 43
Регистрация: 10.05.2021
Сообщений: 1,564
Записей в блоге: 10
29.02.2024, 09:58
Цитата Сообщение от Vladimir1753 Посмотреть сообщение
В будущем мне придется считывать из файла неизвестную мне фамилию водителя
Под 3 параметра (с использованием API из кода выше).
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
'==================================================================================================
Function TxtFind(sPath$, s1$, s2$, sEnd$, sOut$) As Boolean
Dim s$, i1&, i2&
 
s = PRDX_TextFile_GetString(sPath)
s = PRDX_CodePage_CodePageToWin(s)
 
i1 = InStr(1, s, s1, vbTextCompare):                If (i1 = 0) Then Exit Function
i1 = InStr(i1 + Len(s1), s, s2, vbTextCompare):     If (i1 = 0) Then Exit Function
i1 = i1 + Len(s2)
i2 = InStr(i1, s, sEnd, vbTextCompare):   If (i2 = 0) Then Exit Function
 
sOut = Mid$(s, i1, i2 - i1): TxtFind = True
End Function
'--------------------------------------------------------------------------------------------------
Private Sub Test_TxtFind()
Dim s$, s1$, s2$, sEnd$
 
s = "…\ШаблонТранспортнойНакладной_002.fp3"
If TxtFind(s, "memo91", " text=""", """", s) Then MsgBox "«" & s & "»"
End Sub
'==================================================================================================
1
509 / 163 / 22
Регистрация: 04.10.2015
Сообщений: 646
01.03.2024, 17:12
Цитата Сообщение от Zeag Посмотреть сообщение
Вот у меня архив разных функций для перекодировки
Слава Богу, что такая потребность до сих пор не возникала.
Глянул на вашу коллекцию декодирования и впечатлился. Забрал на всякий случай. Спасибо.
0
Вернулся
 Аватар для HackerVlad
1753 / 649 / 45
Регистрация: 10.09.2021
Сообщений: 2,805
29.03.2024, 15:25
Цитата Сообщение от andris2 Посмотреть сообщение
Вам еще повезло, что строка всего лишь 70 kB, а не 70 Mb
Я спокойно и 70 Мб считывал в переменную String. Если оперативной памяти хватает то всё пройдёт успешно. Причём я разработал алгоритмы для сверх-быстрой обработки для себя.

Добавлено через 6 минут
Цитата Сообщение от Jack Famous Посмотреть сообщение
Я беру в текстовую переменную десятки (80 стабильно), а иногда и сотни (370 в одном справочнике) мегабайт данных из тектового файла — и ничего страшного. Пока оперативки хватает — смело можно использовать. Если не хватает, то даже не знаю — я не сталкивался.
Тогда надо просто использовать другую технологию чтения файла. Я сталкивался. Я разбирался с этим уже. Либо можно написать самописный код с буферной подкачкой (у меня есть такой код) либо использовать отображение файла в память как это любит делать The Trick просто открывать и читать файл через функцию MapViewOfFile. Функция MapViewOfFile отображает представление проецируемого файла в адресное пространство вызывающего процесса.

Visual Basic
1
2
3
4
5
6
Private Declare Function MapViewOfFile Lib "kernel32" ( _
                         ByVal hFileMappingObject As OLE_HANDLE, _
                         ByVal dwDesiredAccess As Long, _
                         ByVal dwFileOffsetHigh As Long, _
                         ByVal dwFileOffsetLow As Long, _
                         ByVal dwNumberOfBytesToMap As Long) As Long
1
Вернулся
 Аватар для HackerVlad
1753 / 649 / 45
Регистрация: 10.09.2021
Сообщений: 2,805
29.03.2024, 15:29
Цитата Сообщение от Jack Famous Посмотреть сообщение
Предлагаю не думать о том, чего, скорее всего, не наступит.
Если это произойдёт то будет Run-time error 14 - Недостаточно места в строке. Поэтому лучше обработать эту ошибку на всякий случай. Теоретически такая вероятность есть. Если оперативки не хватит.
Миниатюры
Как в большом текстовом файле записанного одной очень длинной строкой с кодировкой utf-8 найти и заменить текст?  
1
933 / 366 / 43
Регистрация: 10.05.2021
Сообщений: 1,564
Записей в блоге: 10
29.03.2024, 15:31
Цитата Сообщение от HackerVlad Посмотреть сообщение
Тогда надо просто использовать другую технологию чтения файла
например, можно просто читать файл построчно встроенными методами (это достаточно быстро)
0
Вернулся
 Аватар для HackerVlad
1753 / 649 / 45
Регистрация: 10.09.2021
Сообщений: 2,805
29.03.2024, 15:32
Цитата Сообщение от Jack Famous Посмотреть сообщение
Строки в VBA поддерживают символы всей основной таблицы Unicode (65 535 символов) — возможно и больше, но я не помню.
Больше невозможно в двухбайтовой кодировке UTF-16
0
933 / 366 / 43
Регистрация: 10.05.2021
Сообщений: 1,564
Записей в блоге: 10
29.03.2024, 15:32
Цитата Сообщение от HackerVlad Посмотреть сообщение
лучше обработать эту ошибку на всякий случай. Теоретически такая вероятность есть. Если оперативки не хватит.
код выложен мной в общий доступ — никаких ограничений для творчества у тебя нет
0
Вернулся
 Аватар для HackerVlad
1753 / 649 / 45
Регистрация: 10.09.2021
Сообщений: 2,805
29.03.2024, 15:34
Цитата Сообщение от Jack Famous Посмотреть сообщение
инструменты ПОЛУЧЕНИЯ строки из текстового файла работают с ДРУГОЙ кодировкой (ANSI, кажется)
Встроенными средствами VB то да только в ANSI файл можно прочитать. Если через API то можно и UTF-16.
0
933 / 366 / 43
Регистрация: 10.05.2021
Сообщений: 1,564
Записей в блоге: 10
29.03.2024, 15:39
Цитата Сообщение от HackerVlad Посмотреть сообщение
Если через API то можно и UTF-16.
прошу продемонстрировать. Не слышал про апи для получения всего текста текстового файла. Интересно проверить на скорость, т.к. указанный мной метод ну очень быстрый.

P.S.: метод показал мне ZVI (в коопе с sokol92)
0
Вернулся
 Аватар для HackerVlad
1753 / 649 / 45
Регистрация: 10.09.2021
Сообщений: 2,805
29.03.2024, 16:08
Цитата Сообщение от Jack Famous Посмотреть сообщение
потому что VBA не работает с UTF-8 по умолчанию.
Наверняка, если изменить настройки винды/реестра, то может заработать
Нет не заработает. VBA никогда не будет работать с UTF-8 по умолчанию.

Добавлено через 6 минут
Цитата Сообщение от Jack Famous Посмотреть сообщение
например, можно просто читать файл построчно встроенными методами (это достаточно быстро)
Ты должно быть шутишь))) Это само медленно, а не само быстро)))

Добавлено через 18 минут
Цитата Сообщение от Jack Famous Посмотреть сообщение
прошу продемонстрировать.
Это есть в моей теме Как правильно открыть TXT файл для чтения, например чтобы запихнуть в TextBox или просто загрузить в массив строк

Добавлено через 3 минуты
Jack Famous, вообще лучше полностью прочитай мою тему Как правильно открыть TXT файл для чтения, например чтобы запихнуть в TextBox или просто загрузить в массив строк там есть все ответы
0
1409 / 868 / 93
Регистрация: 08.02.2017
Сообщений: 3,704
Записей в блоге: 2
29.03.2024, 16:37
Цитата Сообщение от HackerVlad Посмотреть сообщение
Private Declare Function MapViewOfFile Lib "kernel32"
Это для 32 bit, в x64 нет этой проблеммы с ограничением памяти
0
933 / 366 / 43
Регистрация: 10.05.2021
Сообщений: 1,564
Записей в блоге: 10
29.03.2024, 16:44
Цитата Сообщение от HackerVlad Посмотреть сообщение
вообще лучше полностью прочитай мою тему
5 страниц, где trick тебя убеждает, что его вариант далеко не всегда нужен? Нет, спасибо — это я и так понимаю
Вот, если ты сделаешь стенд, где сравнишь скорость получения строки "моим" методом и "своим", и твоя скорость будет заметно выше для разного размеров файлов — тогда я с удовольствие гляну. А пока меня вполне устраивает существующее решение.

Хорош оффтопить чужую тему, друзья. Вопрос тут давно закрыт, а рассуждать и тестировать стоит в отдельно созданной для этого теме.
1
Вернулся
 Аватар для HackerVlad
1753 / 649 / 45
Регистрация: 10.09.2021
Сообщений: 2,805
29.03.2024, 17:21
Цитата Сообщение от Jack Famous Посмотреть сообщение
оффтопить
Я протистую. Я давал ценные комментарии исключительно по теме.

Добавлено через 4 минуты
Цитата Сообщение от testuser2 Посмотреть сообщение
Это для 32 bit,
Автор темы использует 32-битный Microsoft Excel 2010.
0
Эксперт MS Access
 Аватар для Eugene-LS
13254 / 5933 / 1526
Регистрация: 05.10.2016
Сообщений: 16,598
30.03.2024, 14:03
Цитата Сообщение от Vladimir1753 Посмотреть сообщение
строки что искать: "{№_Заказа}" будет в ячейке Excel «A1», а на что заменить "12345/19-24" будет в ячейке Excel «B1» и т.д.
Sub Replace_In_UTF8_TextFile_ByCells
Visual Basic
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
Sub Replace_In_UTF8_TextFile_ByCells()
Dim sFindVal As String, sReplaceVal As String, lPos As Long, iCount As Integer, iTempCount As Integer
Dim objWorksheet As Worksheet
Dim objADOStream As Object
Dim sSRCTextFilePath As String, sDSTFilePath As String
Dim sVal As String, lVal As Long, lRows As Long
'Имя исходного файла в папке где исполняем
    Const aSRCFileName As String = "ШаблонТранспортнойНакладной_001.fp3"
'Имя результирующего файла в папке где исполняем
    Const aResFileName As String = "ШаблонТранспортнойНакладной_Res001.fp3"
'--------------------------------------------------------------------------------------------------------
 
'Полный путь к исходному файлу
    sSRCTextFilePath = ThisWorkbook.Path & "\" & aSRCFileName
    If Dir(sSRCTextFilePath) = "" Then
        MsgBox "Файл: " & aSRCFileName & _
            " - не найден в папке приложения!", vbExclamation
        Exit Sub
    End If
    
'Путь к файлу назначения:
    sDSTFilePath = ThisWorkbook.Path & Application.PathSeparator & aResFileName
    
    Set objWorksheet = ThisWorkbook.Worksheets(1)
 
'Номер посл. заполненной строки
    lRows = objWorksheet.UsedRange.Rows.Count
    If Not lRows > 0 Then
        MsgBox "Данные для замены не найдены!", vbExclamation
        Exit Sub
    End If
    
'Чтение файла
    Set objADOStream = CreateObject("ADODB.Stream")
    objADOStream.Charset = "utf-8"
    objADOStream.Open
    objADOStream.LoadFromFile sSRCTextFilePath
    sVal = objADOStream.ReadText()
    objADOStream.Close
 
' Поиск и замена
    With objWorksheet
        For lVal = 1 To lRows
            sFindVal = .Cells(lVal, 1) & ""     ' Что меняем
            sReplaceVal = .Cells(lVal, 2) & ""  ' На что меняем
            
            If Len(sFindVal) > 0 And Len(sReplaceVal) > 0 Then
                lPos = InStr(1, sVal, sFindVal, vbTextCompare)
                If lPos > 0 Then
                    sVal = Replace(sVal, sFindVal, sReplaceVal, 1, 1, vbTextCompare)
                    ' Проверка:
                    lPos = InStr(1, sVal, sFindVal, vbTextCompare)
                    If lPos = 0 Then
                        iCount = iCount + 1
                    Else
                        MsgBox "Выражение: " & sFindVal & " в файле не найдено!", vbExclamation
                        Debug.Print sFindVal & " -> " & sReplaceVal
                    End If
                End If
            End If
        Next
    End With
    
'Save & Close
    objADOStream.Open
    objADOStream.WriteText sVal
    objADOStream.SaveToFile sDSTFilePath, 2   ' Сохранение (2 = Create Or Update)
    
    objADOStream.Close: Set objADOStream = Nothing
    Set objWorksheet = Nothing
 
    sVal = "В исходном файле произведено замен: " & iCount & vbCrLf & _
        "Изменённый файл сохранён как:" & vbCrLf & sDSTFilePath
 
    'Debug.Print sVal
    MsgBox sVal, vbInformation
End Sub
Вложения
Тип файла: zip post17227059.zip (37.9 Кб, 15 просмотров)
2
Эксперт MS Access
 Аватар для Eugene-LS
13254 / 5933 / 1526
Регистрация: 05.10.2016
Сообщений: 16,598
30.03.2024, 14:17
Vladimir1753, в коде (постом выше) - Обьявление ... iTempCount As Integer = Лишнее.
Забыл удалить.
1
Модератор
Эксперт MS Access
 Аватар для shanemac51
12511 / 5085 / 814
Регистрация: 07.08.2010
Сообщений: 14,959
Записей в блоге: 4
30.03.2024, 16:20
Цитата Сообщение от Vladimir1753 Посмотреть сообщение
Напишите пример Sub, как в приложенном фале "ШаблонТранспортнойНакладной_001.fp3 " заменить строку
я бы видимо взяла ваш текст
- кодом в екселе разбила на подстроки по символу "<"
- подстроку на 2 ячейки по слову ТЕХТ= и не зависела бы от имен полей, их количества и размеров
- затем ввела данные в столбец 4,5,6,7,8,9,10 - каждый столбец можно распечатать отдельно, ДЛЯ ЭТОГО ДОБАВИТЬ СТРОКУ В НАЧАЛО для флажка
- и заново сформировала UTF-8-для выбранного столбца
1.все до слов ТЕХТ=", если они есть2.между кавычками во фразе ТЕХТ="…" />3.можно добавить фильтр на MemoView и на name=4.новое значение
<TfrxMemoView Name="Page" ... . . . . 1  
<TfrxMemoView Name="Data1D_ORDER" ... . . . .21.02.2024  
    
<TfrxMemoView Name="Data1VC_ORDER" ... . . . .{№_Заказа} 12345/19-24
    
''   
<TfrxMemoView Name="Data1N_DOC_CNT" ... . . . .{Цифрами_кг} 12345 кг
    
<TfrxMemoView Name="Data1VC_ADR_TO" ... . . . .{Организация_ Грузополучателя}  
<TfrxMemoView Name="Memo91" ... . . . .{ФИО_Водителя} Иванов И. И.
    
1
Вернулся
 Аватар для HackerVlad
1753 / 649 / 45
Регистрация: 10.09.2021
Сообщений: 2,805
30.03.2024, 18:55
Спасибо всем за готовые решения. Конечно придётся тут немного помучиться. С JSON гораздо проще было бы))) Но лично я открывал бы UTF-8 на чтение через API. Ну кому как нравится. Не все любят API так как я.

Добавлено через 1 минуту
Цитата Сообщение от Jack Famous Посмотреть сообщение
строки "моим" методом и "своим", и твоя скорость будет заметно выше
моя скорость будет выше, но не сильно выше. если тебе так надо можешь сам проверить. для тебя я этого писать не буду.
0
4 / 1 / 0
Регистрация: 17.03.2021
Сообщений: 26
31.03.2024, 21:36  [ТС]
Цитата Сообщение от Eugene-LS Посмотреть сообщение
в коде (постом выше) - Обьявление
Большое спасибо за ещё один вариант решения моей проблемы. Сейчас на работе просто «завал» работы, но чуть позже попробую Ваш код.

Добавлено через 9 минут
Цитата Сообщение от shanemac51 Посмотреть сообщение
я бы видимо взяла ваш текст
- кодом в екселе разбила на подстроки по символу "<"
Большое спасибо за ещё один вариант решения моей проблемы. Я пытался вначале так сделать, но быстро запутался с КОИ-8. Раньше я с файлами разбитыми на строки делал что-то похожее . Но в этом случае столкнулся с файлом записанным одной длинной строкой и обратился за помощью на форум. Ведь я не программист. Так, просто самоучка с книжкой на коленках. В будущем Ваше предложение мне пригодится для решения других подобных проблем.
Спасибо.
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12511 / 5085 / 814
Регистрация: 07.08.2010
Сообщений: 14,959
Записей в блоге: 4
31.03.2024, 21:49
Цитата Сообщение от Vladimir1753 Посмотреть сообщение
В будущем Ваше предложение мне пригодится для решения других подобных проблем.
главное достоинство - не надо думать о структуре файла, главное - чтобы ТЕХТ .... был в конце подстроки
если это не так(после текста еще какой-то параметр, придется разнести в 3 столбца вместо 2-х

объем работы
- 80 мб - это не проблемный размер, это не гигобайты
- макрос-1, который считывает UTF-8, делит на строки и заносит в лист ексель, что не сложно реализовать
- далее обычный ввод данных в лист ексель по столбцам, чтобы видеть столбец2 с текстом и столбец 3 с именем мемо, можно прицепить и уже сделанную таблицу
- макрос-2 для обратной записи в UTF-8

причем методика пригодна для любого подобного шаблона
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.03.2024, 21:49

Как изменить строку в очень большом dll файле?
Добрый день у меня есть dll файл с 394965 строками. На 329165 строке есть значение которое мне нужно изменить. Как я могу сделать это...

Заменить текст в текстовом файле в определённой позиции
Есть текстовый файл: rcts_strAdminPassword = &quot;password&quot;; gam_idGameMode = &quot;Deathmatch&quot;; ser_iMaxClientBPS = 12000; ...

Как найти строку в текстовом файле и заменить её данными из другого файла
Добрый день. Пытаюсь решить следующую задачу. Есть файл текстовый. В нем необходимо найти строку с параметрами материала и заменить...

Подсчитать количество строк в текстовом файле. В текстовом файле все строчные гласные заменить на заглавные
Проблема состоит в том, чтобы заменить буквы в векторе на заглавные, 42 строчка. #include &lt;iostream&gt; #include &lt;string&gt; ...

В текстовом файле заменить все вхождения одной последовательности на другую, результат вывести на экран
В текстовом файле Заменить все вхождения одной последовательности на другую, результат вывести на экран.


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru