Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/36: Рейтинг темы: голосов - 36, средняя оценка - 4.53
2 / 2 / 0
Регистрация: 27.04.2011
Сообщений: 9

Сравнение строк как нетривиальная задача

27.04.2011, 23:26. Показов 7328. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уважаемой публике желаю здравствовать!

Являясь программистом на VBA со стажем два месяца (считая с того дня, когда я узнал, что это значит), я замахнулся на довольно сложную проблему.

Исходные данные: 2 списка названий (книг) длиной приблизительно 8000-9000 каждый. Список 'А' имеет при себе второй колонкой цифры (товарный код). Список 'Б' такой колонки не имеет, задача - добавить, исходя из списка 'А'.

Книги в обоих списках совпадают приблизительно на 80%. Однако сам текст названия одинаковых книг примерно в 70% случаев отличается. Т.е., в списке 'А' мы имеем 'Л.Н. Толстой, 'Война и Мир'', а в списке 'Б', например, 'Вайна и мир в четырех томах (переплет)'. Это самый вопиющий пример, суть ясна.

Был придуман механизм сравнения:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
For line_num_A = 2 To end_a   - проход всего списка А
    name_length = Len(Cells(line_num_A, 1)) - длина названия А   
    For line_num_B = 2 To end_B - проход списка Б
        y = 0
        For k = 1 To name_lenght - 1 проход по буквам названия из списка А
            text_comp = Mid(Cells(list_num_A, 1), k, 2) - получение послед-но двух букв из названия А
            res = Cells(list_num_B, 3).Text Like '*' & text1 & '*' - сравнение каждого наименования из 'Б' с очередными 2-мя буквами из названия в 'А'.
            If res = True Then y = y + 1
        Next
    Next
Next
Идея сравнения в том, что мы считаем кол-во совпадающих сочетаний букв, ищем максимальное и в виде Msgbox предлагаем пользователю подтвердить, что это и правда одна и та же книга. За основу (как видно из кода) взят принцип выбора букв (1-2, 2-3, 3-4) и т.д.

Проблемы: (интересно, какой процент до сюда дочитает?)
1) Философская - непонятно, правда ли именно такой подход (по 2 буквы) является оптимальным. На коротких списках было оттестировано несколько разных: (1,2,3), (1-2, 3-4, 5-6), (1-2-3, 2-3-4, 3-4-5), и т.д., кажется, что выбранный работает лучше и быстрее всего. Но только кажется.

2) Практическая - пройдя одно наименование из 'А' мы получили для каждого наименования из 'Б' кол-во совпадений. Их хочется куда-то записать. В ячейки - слишком долго.

Придумался такой вариант: записать эти значения в массив, присвоив каждому соответствующий номер из списка 'Б'. Т.е. массив допустим, будет содержать 8000 нулей, цифру 5 под индексом 3879 (номер из 'Б'), и цифру 8 под индексом 1409. Теперь мы находим максимальное значение в массиве (ubound, не учите) и ОЧЕНЬ хотим узнать, под каким же индексом оно стоит (т.е., какой номер в списке 'Б' ему все же соответствует).

Сделав это, мы предложим юзеру подтвердить, что текущее наименование из 'А' соответствует найденному номеру 'Б'. А юзер, допустим, говорит, нет, не то. Такое бывает. Тогда мы возвращаемся к массиву, удаляем на фиг цифру 8 под индексом 1409 и снова ищем максимум - повторить операцию, в общем.

В изложенной схеме есть еще и дополнения, например, когда кол-во совпадений равно (длина исходной строки - 1), нам даже спрашивать ничего не нужно, но это уже детали.

К сожалению, я так до сих пор и не разобрался с массивами, тем более с такими мудреными операциями. Как реализовать вышеописанную схему я не имею ни МАЛЕЙШЕГО ПОНЯТИЯ, и здесь будет полезна любая помощь!!!

Надеюсь, мне удастся заинтересовать кого-то этой проблемой. Очень буду благодарен за любые мнения относительно постановки задачи, методов ее решения и конкретной реализации проблем.

Отдельное спасибо тем, кто сумел дочитать до конца
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.04.2011, 23:26
Ответы с готовыми решениями:

Нетривиальная задача импорта из Access в Excell
День добрый господа. Помогите начинающему. Есть таблица в Акцессе с полями "Pole1", "Pole2", "Pole3"... Есть...

Нетривиальная задача на js
Здравствуйте, есть маленькая проблемка. Данные: есть 2 файла front.js и bg.js, поместить в 1 файл невозможно, архитектура такая. ...

Задача на сравнение строк
И снова доброго времени суток, уважаемые программисты. Имеется задача: Даны две строки. Выяснить, можно ли путём перестановки получить...

17
4 / 4 / 0
Регистрация: 15.09.2010
Сообщений: 228
28.04.2011, 05:19
>>> Теперь мы находим максимальное значение в массиве (ubound, не
>>> учите) и ОЧЕНЬ хотим узнать, под каким же индексом оно стоит
>>> (т.е., какой номер в списке 'Б' ему все же соответствует).

(Далее идут мои домышления):
Ваш массив имеет вид (1,0,2,0...3879,5,1409,8...) ?
UBound возвращает максимальный идентификатор массива...

Че-то типа того:
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
Option Compare Database
Option Explicit
Public cnn  As ADODB.Connection
Public rst  As New ADODB.Recordset
Public strSQL As String
Public dDate As Date
 
   
Public Function InsertFiles() As Long
 
'Error-handler inserted on 13.02.2005 at 18:19 by Dedushev M.N.
'
On Error GoTo InsFil_Error
 
   Dim iTimer As Long
   iTimer = Timer
   Set cnn = CurrentProject.Connection
      cnn.Execute 'DELETE * FROM Main_Tmp'
      Call InsertFileInTmp('admnar8')
      Call InsertFileInTmp('admnar9')
      
      InsertFiles = Timer - iTimer
   cnn.Close
   
 
InsFil_Exit:
Exit Function
 
InsFil_Error:
MsgBox 'Непредвиденная разработчиком ошибка - ' & Err.Number & vbCrLf & vbCrLf & Error$, vbExclamation, 'admnar - InsFil'
Resume InsFil_Exit
 
End Function
 
Public Function InsertFileInTmp(strFile As String) As Boolean
 
'Error-handler inserted on 13.02.2005 at 18:19 by Dedushev M.N.
'
On Error GoTo InsFilInTmp_Error
 
   Dim bPos As Byte, idRajon As Integer
   Dim fld As ADODB.Field, idStatja As Integer
   rst.Open strFile, cnn, adOpenKeyset, adLockReadOnly
      rst.AbsolutePosition = 5
      bPos = IIf(InStr(rst.Fields(0), 'ГАИ + ПДПС') > 0, 16, 14)
      rst.AbsolutePosition = 7
      dDate = rst.Fields(1)
      
      strSQL = 'SELECT Count (*) FROM Main WHERE DateReport = #'
      strSQL = strSQL & Format(dDate, 'mm/dd/yy') & '#'
      If CLng(cnn.Execute(strSQL).GetString) > 0 Then GoTo InsFilInTmp_Exit
      
      rst.AbsolutePosition = bPos
      Do Until rst.EOF
         idRajon = GetIdByTextRajon(rst.Fields(0))
         If idRajon <> 0 Then
            For Each fld In rst.Fields
               idStatja = GetIdByTextStatja(fld.Name)
               If idStatja <> 0 Then
                  strSQL = 'Insert Into Main_Tmp (DateReport, Rajon, '
                  strSQL = strSQL & 'Statja, Summa) Select ''
                  strSQL = strSQL & dDate & '','' & idRajon & '',''
                  strSQL = strSQL & idStatja & '','' & Nz(fld, 0) & '''
                  cnn.Execute strSQL
               End If
            Next fld
         End If
         rst.MoveNext
      Loop
 
InsFilInTmp_Exit:
rst.Close
Exit Function
 
InsFilInTmp_Error:
MsgBox 'Непредвиденная разработчиком ошибка - ' & Err.Number & vbCrLf & vbCrLf & Error$, vbExclamation, 'admnar - InsFilInTmp'
Resume InsFilInTmp_Exit
 
End Function
 
Public Function GetIDMaxArrValue() As Long
 
'Error-handler inserted on 18.02.2005 at 07:54 by Dedushev M.N.
'
On Error GoTo GetIDMaxArrVal_Error
 
   Dim arr, i As Integer, maxA As Long, strArr As String
   Dim strReplace As String
   arr = Array(1, 10, 2, 25, 3, 35, 4, 11)
Begin_Process:
   For i = 1 To UBound(arr) Step 2
      If arr(i) > arr(maxA) Then
         maxA = i
      End If
   Next i
   Select Case MsgBox('Совпадений - ' & arr(maxA), _
                                    vbQuestion + vbYesNoCancel)
      ' Вместо 'Совпадений - ' ляляля -
0
4 / 4 / 0
Регистрация: 15.09.2010
Сообщений: 228
28.04.2011, 05:21
Сорри - CTRL+A использовал

Вам:
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
Public Function GetIDMaxArrValue() As Long
 
'Error-handler inserted on 18.02.2005 at 07:54 by Dedushev M.N.
'
On Error GoTo GetIDMaxArrVal_Error
 
Dim arr, i As Integer, maxA As Long, strArr As String
Dim strReplace As String
arr = Array(1, 10, 2, 25, 3, 35, 4, 11)
Begin_Process:
For i = 1 To UBound(arr) Step 2
If arr(i) > arr(maxA) Then
maxA = i
End If
Next i
Select Case MsgBox('Совпадений - ' & arr(maxA), _
vbQuestion + vbYesNoCancel)
' Вместо 'Совпадений - ' ляляля - вставь что тебе нужно
Case vbYes
GetIDMaxArrValue = maxA
GoTo GetIDMaxArrVal_Exit
Case vbNo
strArr = Join(arr, ';')
strReplace = arr(maxA - 1) & ';' & arr(maxA) & ';'
strArr = Replace(strArr, strReplace, '')
arr = Split(strArr, ';')
GoTo Begin_Process
Case vbCancel
GoTo GetIDMaxArrVal_Exit
End Select
 
GetIDMaxArrVal_Exit:
Exit Function
 
GetIDMaxArrVal_Error:
MsgBox 'Непредвиденная разработчиком ошибка - ' & _
Err.Number & vbCrLf & vbCrLf & Error$, vbExclamation, _
'admnar - GetIDMaxArrVal'
Resume GetIDMaxArrVal_Exit
 
End Function
0
2 / 2 / 1
Регистрация: 10.04.2011
Сообщений: 415
28.04.2011, 11:47
А яндексом пользоваться не пробовал?
Твоя задача называется 'нечеткое сравнение строк', она давно реазизована на VBA, лежит на сайте для разработчиков вот тут:
http://www.microsoft.ru/offext/documents/office/details.aspx?id=53&cat=77
1
2 / 2 / 0
Регистрация: 27.04.2011
Сообщений: 9
01.05.2011, 21:49  [ТС]
Нет, не очень хорошо она там реализована. Мой метод, при правильно подобранных переменных, дает меньше ошибок, по крайней мере на моих же текстах.

Спасибо, кто ответил, я теперь напряженно пытаюсь понять, что же именно мне ответили... Вчитываюсь, в общем.
0
4 / 4 / 2
Регистрация: 06.03.2011
Сообщений: 151
02.05.2011, 12:55
Ну всё! Терпение лопнуло! Доколе это будет продолжаться?!
Ну как можно писать такие длинные коды и притом не выполняющие поставленной задачи.
Присылай кусок твоего документа мне по мылу и увидишь, как всё намного проще можно реализовать.
1
4 / 4 / 2
Регистрация: 06.03.2011
Сообщений: 151
02.05.2011, 13:01
Извиняюсь за избыток экспресии в предыдущем сообщении.
Задача, действительно, очень интересная, аж руки чешутся.
Но самому 'генерировать' исходные данные не хочется.
Не сочти за труд - поделись с братом по разуму.
1
2 / 2 / 1
Регистрация: 10.04.2011
Сообщений: 415
04.05.2011, 16:21
Почитай статью на тему нечеткого сравнения тут:
http://www.impb.ru/~rcdl2004/cgi/get_paper_pdf.cgi?pid=27
0
2 / 2 / 1
Регистрация: 10.04.2011
Сообщений: 415
04.05.2011, 16:25
И вот еще сайтик: http://itman.narod.ru
0
1 / 1 / 0
Регистрация: 25.04.2010
Сообщений: 30
09.05.2011, 16:24
привет, Алик
как с задачей, справился?
мне кажется, тебе должны дать нобелевскую премию, если достигнешь результата 90%
я делал что-то подобное, программа ищет такие совпадения примерно на 70%.
мне кажется тебе не стоит заниматься такими задачами,
оптимизируй свою базу, ведь у каждой книги есть уникальный номер, если не ошибаюсь...
0
0 / 0 / 1
Регистрация: 11.10.2010
Сообщений: 363
09.05.2011, 16:49
сама по себе задача демоническая, хотя в жизни иногда встречается. я бы ни в коем случае не использовал для этого excel, даже если результат должен писаться в excel. потому что это будет очень долго и не универсально (список может быть больше и строки длиннее).
читай распределения Гаусса
0
2 / 2 / 0
Регистрация: 27.04.2011
Сообщений: 9
09.05.2011, 18:58  [ТС]
To Decadent: у каждой книги и правда есть уникальный номер. Вот этот номер и надо внести из одной базы, где он уже есть, в другую. Такие дела.

To Babken: ни фига не демоническая, и решить ее надо именно методами excel, в частности, поскольку никакими другими я не владею.

А все-таки с массивами мне может кто-то помочь, или уважаемому сообществу эта тема вообще непонятна?

Спасибо.
0
1 / 1 / 0
Регистрация: 25.04.2010
Сообщений: 30
10.05.2011, 11:09
могу рассказать свой путь решения подобной задачи. путь свой, так сказать, не судите строго.
имеем два списка на двух листах.
1) делаем из них один список.
2) удаляем их него всякий хлам типа запятых, тире, точек, кавычек и т.п.
3) бьем список на слова, т.е. было 'иван-дурак в четырех томах' в одной ячейке, стало иван_дурак_в_четырех_томах в пяти ячейках.
4) далее каждому слову присваивается индекс (номер строки и ячейки), считается повтор слов (например, предлог 'в' встретился 1054 раз, 'Иван' - 5 раз, 'дурак' - 1 раз, это нужно будет далее для сравнения)
5) самое интересное :-) Сравнение списка. Благодаря предыдущим четырем пунктам слова делятся на три класса: а) с повтором более 5 раз (число 5 выводится опытным путем и может меняться); б) стоп-слова, в случае с книгами это 'том', 'издательство','переплет' и т.п.; в) слова с повтором менее и равно 5 раз. Сравнение происходит путем подсчета вероятности. Слова из первых двух групп относятся к стоп словам, вероятность считается по формуле
вес = (повтор * 2) / (сумма - стопслова),
где, сумма - кол-во слов в сравниваемых строках.
если вероятность более 65% (по моему опыту это то, что надо) предлагаем пользователю подтвердить сравнение)
также в строках с вероятностью от 50% до 65% может встретиться то, что нужно.
недостатки метода.
изначально программа писалась под базы данных названий компаний, где необходимость учитывать словоформы (то бишь сравнивать корни слов)относительно низка. в случае с книгами, да и любой такой задачей, словоформы учитывать необходимо, чего нет в программе (слова сравниваются в лоб)
второе, невозможно учесть ошибки в написаниях, как бороться с этой проблемой, я не представляю (чувствую нужно учитывать раскладку клавиатуры...)
вообще задача решаемая, однако на ее решении делают огромные деньги (Google, Яндекс). Еще раз советую пойти другим путем.
0
2 / 2 / 0
Регистрация: 27.04.2011
Сообщений: 9
11.05.2011, 22:01  [ТС]
В общем, всем заинтересованным могу сказать, что с массивами я разобрался, и сейчас ставлю очень интересные эксперименты над собственно сравнением строк.

Оказывается, многие из уже существующих методов - неприменимы. Более того, похоже, что решение заключается в гибком использовании различных методов сравнения. Работаю сейчас над этим, параллельно пытаясь добиться максимального ускорения работы кода - в данный момент на поиск одного соответствия программа тратит 6,5 секунд (база из 8000 записей, кстати), и это при нормальном hardware и незагруженной системе. Как бороться с этим, пока не ясно.

Всех, кто интересуется подобной тематикой - нечетким сравнением - приглашаю к диалогу и сотрудничеству. Тема интересная и богатая, а главное, задачи с лингвистической точки зрения получаются настолько сложные, что никакому Тындексу не снилось.

Ну, как, есть желающие присоединиться?
1
0 / 0 / 1
Регистрация: 11.10.2010
Сообщений: 363
12.05.2011, 11:48
>>>Сравнение происходит путем подсчета вероятности.
именно это я имел ввиду. только сначала нужно отбросить совсем нереальные варианты методом распределения гаусса.

Уважаемый Алик! ты верно заметил что даже при 8000 строк в списке все работает медленно. поэтому я и предупреждал тебя, что делать это в excel - изврат! загоняй через olecom автоматизацию все это в реальную субд и там уже насилуй эти списки на любом реальномкомпиляторе языке как хочешь. а потом по результату загоняй обратно в excel если тебе это так надо
0
1 / 1 / 0
Регистрация: 25.04.2010
Сообщений: 30
12.05.2011, 11:58
to Alik_K
какие 'многие методы' неприменимы?
'гибкое использование' каких методов ты думаешь использовать?
0
1 / 1 / 0
Регистрация: 25.04.2010
Сообщений: 30
12.05.2011, 12:06
to babken76
просветите неученого человека: как использовать распределение Гаусса в сравнении строк?
насчет применения серьезных СУБД для таких задач никто не спорит,
однако для начала обкатать алгоритм сравнения в Excele было бы не лишним. вообще такие задачи решаются в уме ;-)
0
2 / 2 / 0
Регистрация: 27.04.2011
Сообщений: 9
12.05.2011, 15:55  [ТС]
To Babken:
К сожалению, воспользоваться советом относительно СУБД не могу. Я изучал 6 языков, два из которых являются широкораспространенными, а остальные четыре сейчас практически не используются. К сожалению, среди этих шести нет ни одного языка программирования, а мои жалкие попытки с VBA в последнее время - не в счет. Переводчик я по образованию...

Теперь про сложности (и немножко про методы):
1) На самом деле, в каждом списке есть две строки - наименование и автор. При этом регулярно случается, что в наименовании не совпадает вообще ни одной буквы (пример ниже), бывает и такое, что авторы записаны совершенно по-разному, включая ситуации, когда автора поместили в наименование, а соответствующую строку оставили пустой.

2) Во многих наименованиях встречаются одинаковые слова, которые сильно затрудняют поиск. Например, в строке наименования очень часто присутствует информация о переплете и/или издательстве (это важно для визуального поиска и идентификации книги). Представьте себе наименование '1984 (обложка)'. Если в списке для сравнения попадется что-то вроде '69 (обложка)', у нас не будет вообще никаких шансов.

3) Добавление графы 'автор' в сравнение позволило добиться чуть-чуть лучших результатов. Например, удалось справиться с книгой под названием '38', которая в другом списке идет как 'Тридцать восемь'. С другой стороны, из-за добавления автора возникают сложности с поиском произведений слишком плодовитых авторов.

В данный момент можно сделать следующие выводы:
1) Перебор исходной строки по одному знаку не имеет смысла, если только не использовать сильно понижающий коэффициент (0.5, 0,25 и т.д.)
2) Необходимо как-то (непонятно, пока, как) учитывать длину как исходной, так и сравниваемой строки. В противном случае получается точное соответствие между строками '1984' и '1984 (обложка)', если первая является исходной (а так бывает достаточно часто).
3) Поле автор в лоб использовать в сравнении нельзя, необходимо тоже применять какие-то коэффициенты. В некоторых случаях автор является почти единственным основанием для сопоставления (см. пример с '38'), в некоторых случаях - корректирует данные, в некоторых - мешает. Все эти случаи можно (должно быть можно) как-то алгоритмизировать, как - непонятно.
4) В данный момент используется перебор наименования по 2 и по 3 знака. Это является эффективным в большинстве случаев, но не во всех (см. пример '1984 (обложка)' vs '69 (обложка)'). Как решить эту проблему - тоже не ясно.
5) Шесть секунд на каждое сравнение - это очень много. Однако сократить поиск никак не возможно - ни по первой букве, ни по автору, ни по длине.

Очень жду мыслей, советов и идей.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.05.2011, 15:55
Помогаю со студенческими работами здесь

Coroutine нетривиальная задача
Здравствуйте форумчане. Расскажу свою задачу потом объясню в чем вопрос. Имеем интерфейс: кнопка плей она же пауза, слайдер - скорость, и...

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

Нетривиальная задача (работа с графикой)
Есть чёрно-белая картинка в формате jpg, на которой нарисованы объекты. Необходимо реализовать заливку этих объектов программно. Т.е. я...

Нетривиальная задача про дубли
Пусть есть таблица размером n столбцов*2 строки, в каждой строке могут быть записаны в произвольном порядке различные цифры от 1 до n....

Static поля и многопоточность. Нетривиальная задача.
Нетривиальная задача. Есть класс: public static class My { public static StringBuilder sb = ..... ; } Есть проблема в том что...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
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/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru