-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfut_text.bas
More file actions
90 lines (90 loc) · 4.35 KB
/
fut_text.bas
File metadata and controls
90 lines (90 loc) · 4.35 KB
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
Rem This file is part of the 'File Update Tool' program.
Rem Copyright (C) 2025 Ihar S. Areshchankau
Rem
Rem This program is free software: you can redistribute it and/or modify
Rem it under the terms of the GNU General Public License as published by
Rem the Free Software Foundation, either version 3 of the License, or
Rem (at your option) any later version.
Rem
Rem This program is distributed in the hope that it will be useful,
Rem but WITHOUT ANY WARRANTY; without even the implied warranty of
Rem MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Rem GNU General Public License for more details.
Rem
Rem You should have received a copy of the GNU General Public License
Rem along with this program. If not, see <https://www.gnu.org/licenses/>.
Rem
Rem ======================================
Rem Ìîäóëü îáðàáîòêè òåêñòîâîé èíôîðìàöèè.
Rem ßçûê ïðîãðàììèðîâàíèÿ: FreeBASIC.
Rem ======================================
Rem ==========================================================
Rem Ïðîïóñê óêàçàííûõ ñèìâîëîâ â ñòðîêå.
Rem Âûçîâ: p - ïîçèöèÿ â ñòðîêå, ñ êîòîðîé íà÷èíàòü îáðàáîòêó,
Rem ss - îáðàáàòûâàåìàÿ ñòðîêà,
Rem sc - ñòðîêà ñ ïðîïóñêàåìûìè ñèìâîëàìè.
Rem Âîçâðàò: ïîçèöèÿ â ñòðîêå ïîñëå ïðîïóùåííûõ ñèìâîëîâ.
Rem ==========================================================
Public Function textWalkOver (ByVal p As Integer, ByRef ss As Const String, ByRef sc As Const String) As Integer
While InStr (sc, Mid (ss, p, 1))
p += 1
Wend
textWalkOver = p
End Function
Rem ==============================================================
Rem Ïðîïóñê â ñòðîêå ñèìâîëîâ äî îäíîãî èç óêàçàííûõ.
Rem Âûçîâ: p - ïîçèöèöèÿ â ñòðîêå, ñ êîòîðîé íà÷èíàòü îáðàáîòêó.
Rem ss - îáðàáàòûâàåìàÿ ñòðîêà,
Rem sc - ñòðîêà ñ èñêîìûìè ñèìâîëàìè.
Rem Âîçâðàò: ïîçèöèÿ, â êîòîðîé íàéäåí îäèí èç óêàçàííûõ ñèìâîëîâ.
Rem ==============================================================
Public Function textWalkTo(ByVal p As Integer, ByRef ss As Const String, ByRef sc As Const String) As Integer
Dim res As Integer = InStr (p, ss, Any sc)
textWalkTo = Iif (res = 0, Len (ss) + 1, res)
End Function
Rem ===================================================================
Rem Ïîäñòàíîâêà çíà÷åíèé â øàáëîí ñòðîêè.
Rem Âûçîâ: t - øàáëîí ñòðîêè ñ ïîçèöèÿìè äëÿ âñòàâêè çíà÷åíèé,
Rem v - ñòðîêà ñî çíà÷åíèÿìè, ðàçäåë¸ííûìè ñïåöèàëüíûì ñèìâîëîì.
Rem c - ñïåöèàëüíûé ñèìâîë.
Rem Âîçâðàò: ñòðîêà, ïîñòðîåííàÿ íà îñíîâå øàáëîíà, ñ ïîäñòàâëåííûìè
Rem çíà÷åíèÿìè.
Rem Ïðèìå÷àíèå. Äîïóñêàåòñÿ íå áîëåå 9 çíà÷åíèé äëÿ ïîäñòàíîâêè.
Rem Ïðèìåð: textSubstitute ("Hello, ^1! Good ^0.", "day^World", "^").
Rem ===================================================================
Public Function textSubstitute (ByRef t As Const String, ByRef v As Const String, ByVal c As String = "^") As String
Const n As Integer = 10
Dim res As String, pns(n) As Integer, p As Integer, i As Integer, _
lc As Integer = Len (c), d As Integer
If "" <> v AndAlso "" <> c Then
Rem Îïðåäåëåíèå ïîçèöèé çíà÷åíèé äëÿ ïîäñòàíîâêè.
pns(i) = 1 ' íóëåâîå çíà÷åíèå íà÷èíàåòñÿ ñ ïåðâîé ïîçèöèè
i += 1: p = InStr (v, c)
While i <= n AndAlso p > 0
pns(i) = p + lc
i += 1: p = InStr (p + 1, v, c)
Wend
pns(i) = 1 + Len (v) + lc ' ïîçèöèÿ, ñëåäóþùàÿ çà ïîñëåäíèì ýëåìåíòîì
Rem Ïåðåáîð òî÷åê ïîäñòàíîâêè â øàáëîíå.
i = 1 ' ïîçèöèÿ ïîñëå ïðåäûäóùåé òî÷êè ïîäñòàíîâêè
p = InStr (t, c) ' ïîçèöèÿ î÷åðåäíîé òî÷êè ïîäñòàíîâêè
While p > 0
d = Asc (t, p + lc) - Asc ("0")
If 0 <= d AndAlso d <= 9 AndAlso 0 < pns(d + 1) Then
Rem Äîïîëíåíèå ñòðîêè ôðàãìåíòîì øàáëîíà ìåæäó ïðåäûäóùåé
Rem è òåêóùåé ïîçèöèÿìè ïîäñòàíîâêè.
res += Mid (t, i, p - i)
Rem Äîïîëíåíèå ñòðîêè ïîäñòàíîâî÷íûì çíà÷åíèåì.
res += Mid (v, pns(d), pns(d + 1) - pns(d) - lc)
Rem Îáíîâëåíèå ïîçèöèè ïîñëå òî÷êè ïîäñòàíîâêè
i = p + lc + 1
End If
p = InStr (p + lc + 1, t, c)
Wend
Rem Äîïîëíåíèå ñòðîêè îñòàòêîì øàáëîíà.
res += Mid (t, i)
Else
res = t
End If
textSubstitute = res
End Function