Loopback
|
Posted: Sat Aug 09, 2025 15:45 Post subject: |
|
|
AkulaBig
Нет, не вижу. Вам свои файлы знакомы, я же по этому выводу ничего не могу понять, к сожалению. Непонятно, в каком месте расположена OutputDebugString, выводящая текст, непонятно, где заканчивается вывод одного файла, а где начинается другой. Вообще для таких простыней OutputDebugString становится не слишком удобен.
Фактически я только поменял метод чтения и записи файлов. Вот, чтобы убедиться, специально сделал сравнение результатов чтения предыдущим и новым методом. Строки читаются одинаковые.
 Hidden text
Code: |
Func SwitchIniSect(sIni, sSect, sLng)
# Поддерживаемые языки
# Supported languages
Local arrLang = List("eng", "rus")
Local arrFile = List()
Local i = 0
Local Const GENERIC_READ = 0x80000000
Local Const FILE_SHARE_READ = 1
Local Const OPEN_EXISTING = 3
Local Const FILE_ATTRIBUTE_NORMAL = 128
Local bytes
Local fs = FileGetSize(sIni)
Local buf = Buffer(fs)
buf.Zero()
# Открываем файл для чтения
# Opening file for reading
Local hFile = DllCall("CreateFileW", "wstr", sIni, _
"dword", GENERIC_READ, _
"dword", FILE_SHARE_READ, _
"ptr", 0, _
"dword", OPEN_EXISTING, _
"dword", FILE_ATTRIBUTE_NORMAL, _
"ptr", 0, _
"handle")
If hFile > 0 Then
res = DllCall("ReadFile", "handle", hFile, _
"ptr", buf.ptr, _
"dword", fs, _
"dword*", @bytes, _
"ptr", 0)
DllCall("CloseHandle", "handle", hFile)
Endif
Local out = buf.GetStr(0, bytes)
# Читаем встроенным методом списка
arrFile.LoadFromFile(sIni)
# Сравниваем результаты чтения разными методами
If arrFile.Text = out Then
OutputDebugString("Строки одинаковы")
Else
OutputDebugString("Строки РАЗЛИЧНЫ")
EndIf
out = arrFile.Text
# Проверяем количество языковых секций в файле по шаблону [$sSect
# Check number of language sections in file according to template [$ ssect
Local count = 0
For i = 0 To arrFile.Count-1
If StrPos(arrFile._Item[i], "[" & sSect) > 0 Then
count += 1
EndIf
Next
# Если в файле только одна секция по шаблону [$sSect, завершаем выполнение
# скрипта
# If file has only one section on template [$ ssect, we complete execution
# script
If count <= 1 Then
Free(arrLang)
Free(arrFile)
Exit
Endif
# Переименовываем все секции по шаблону [sect_lng]
# Rename all sections according to template [sect_lng]
For i = 0 To arrLang.Count-1
If StrPos(out, "[" & sSect & "_" & arrLang._Item[i] & "]") = 0 Then
out = StrReplace(out, "[" & sSect & "]", "[" & sSect & "_" & arrLang[i] & "]")
Break
EndIf
Next
# Переименовываем оригинальную секции по шаблону [sect]
# Rename original section according to template [sect]
If StrPos(out, "[" & sSect & "_" & sLng & "]") Then
out = StrReplace(out, "[" & sSect & "_" & sLng & "]", "[" & sSect & "]")
Endif
arrFile.Text = out
arrFile.SaveToFile(sIni, "UTF-16")
Free(arrLang)
Free(arrFile)
EndFunc
|
Может так же и на предыдущем варианте SwitchIniSect было? |
|