powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Сохранение в файл текста.
24 сообщений из 24, страница 1 из 1
Сохранение в файл текста.
    #33326541
zPu1sarz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите чайнику!
Есть переменная типа стринг, в ней есть русские буквы, как сохранить её в файл(temp.txt), кодировка UTF-8 обязательна
...
Рейтинг: 0 / 0
Сохранение в файл текста.
    #33327625
AndreyMp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для начала конвертнуть надо, примерно так.
Код: plaintext
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.
Option Explicit

Enum idCodePage
    Win =  1251 
    Dos =  866 
    Koi =  20866 
    Iso =  28595 
    Utf =  65001 
End Enum

Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, _
        ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, _
        ByVal cchWideChar As Long) As Long
Declare Function WideCharToMultiByte Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, _
        ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByVal lpMultiByteStr As String, _
        ByVal cchMultiByte As Long, ByVal lpDefaultChar As String, ByVal lpUsedDefaultChar As Long) As Long

Public Function ConvertCodePage(SourseString As String, inPage As idCodePage, outPage As idCodePage) As String
  Dim LenSourseString As Long
  Dim strFirst As String
  Dim strSecond As String
  Dim RetStrLong As Long
  LenSourseString = Len(SourseString)
  strFirst = String(LenSourseString *  2 , Chr( 0 ))
  strSecond = String(LenSourseString *  2 , Chr( 0 ))
  RetStrLong = MultiByteToWideChar(inPage, &H1, SourseString, LenSourseString, StrPtr(strFirst), LenSourseString)
  RetStrLong = WideCharToMultiByte(outPage,  0 , StrPtr(strFirst), RetStrLong, strSecond, LenSourseString *  2 , ByVal  0 ,  0 )
  ConvertCodePage = Left(strSecond, RetStrLong)
End Function

...
Рейтинг: 0 / 0
Сохранение в файл текста.
    #33327654
AndreyMp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Далее делаем примерно так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Dim strWin as string
Dim strUtf as string
Dim fsoSave As New FileSystemObject
Dim filSave As TextStream
 Set filSave = fsoSave.CreateTextFile("temp.txt", True)
 strWin="ЙЦУКЕНГШЩЗХ"
 strUtf=ConvertCodePage(strWin, Win, Utf)
 filSave.WriteLine (strUtf)
 filSave.Close
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Сохранение в файл текста.
    #36338802
Фотография Gabit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотел использовать вышеуказанный пример.
Выдает ошибку: Variable not defined
Как решить проблему ?
...
Рейтинг: 0 / 0
Сохранение в файл текста.
    #36338849
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GabitХотел использовать вышеуказанный пример.
Выдает ошибку: Variable not defined
Как решить проблему ?

задефайнить вариаблю, на которую у вас ругается.

Если не скажете, на какую именно переменную ругается, то вряд ли кто-то тут будет пытаться экстасенсизмом.
...
Рейтинг: 0 / 0
Сохранение в файл текста.
    #36339042
Фотография Gabit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
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.
Option Explicit

Enum idCodePage
    Win =  1251 
    Dos =  866 
    Koi =  20866 
    Iso =  28595 
    Utf =  65001 
End Enum

Dim MyFile1 As String

Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, _
        ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, _
        ByVal cchWideChar As Long) As Long
Declare Function WideCharToMultiByte Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, _
        ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByVal lpMultiByteStr As String, _
        ByVal cchMultiByte As Long, ByVal lpDefaultChar As String, ByVal lpUsedDefaultChar As Long) As Long

Public Function ConvertCodePage(SourseString As String, inPage As idCodePage, outPage As idCodePage) As String
  Dim LenSourseString As Long
  Dim strFirst As String
  Dim strSecond As String
  Dim RetStrLong As Long
  LenSourseString = Len(SourseString)
  strFirst = String(LenSourseString *  2 , Chr( 0 ))
  strSecond = String(LenSourseString *  2 , Chr( 0 ))
  RetStrLong = MultiByteToWideChar(inPage, &H1, SourseString, LenSourseString, StrPtr(strFirst), LenSourseString)
  RetStrLong = WideCharToMultiByte(outPage,  0 , StrPtr(strFirst), RetStrLong, strSecond, LenSourseString *  2 , ByVal  0 ,  0 )
  ConvertCodePage = Left(strSecond, RetStrLong)
End Function


Sub WriteToFile()

MyFile1 = "C:\Temp\test.xml"
Dim fso As New FileSystemObject
Set fso = CreateObject("Scripting.FilesystemObject")
Set Textfile = fso.OpenTextFile(MyFile1,  2 , True)

Textfile.WriteLine "<?xml version=""1.0"" encoding=""UTF-8""?>"
strUtf = ConvertCodePage("Текс с кириллицей", Win, Utf)
Textfile.WriteLine strUtf
Textfile.Close

End Sub

Выдает Variable not defined на этой строке:
Код: plaintext
Set fso = CreateObject("Scripting.FilesystemObject")

Добавил после:
Код: plaintext
Dim MyFile1 As String
Строку:
Код: plaintext
Dim fso As New FileSystemObject

Но он не понимает FileSystemObject
...
Рейтинг: 0 / 0
Сохранение в файл текста.
    #36339049
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуйте

Dim fso As Object
...
Рейтинг: 0 / 0
Сохранение в файл текста.
    #36339050
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
References>и добавьте нужную
...
Рейтинг: 0 / 0
Сохранение в файл текста.
    #36339109
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_OneReferences>и добавьте нужную

раз не ругается на определение переменной (предыдущая строка), то скорее всего референс есть
...
Рейтинг: 0 / 0
Сохранение в файл текста.
    #36339115
Фотография Gabit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь читал про:
StrConv(s_str, 64)

Только он не записывает в UTF-8.
Если бы его можно использовать подскажите, кажется он проще ...
...
Рейтинг: 0 / 0
Сохранение в файл текста.
    #36339144
Фотография Gabit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proпопробуйте
Dim fso As Object
Спасибо помогло.
Если все таки есть возможность для данного случая использовать:
Код: plaintext
StrConv(s_str,  64 )

Подскажите пожайлуста.
Мне на самом деле надо просто записать в файл в кодировке utf-8.
...
Рейтинг: 0 / 0
Сохранение в файл текста.
    #36339160
Фотография Gabit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибку не выдает, но результат этих строк:
Код: plaintext
1.
2.
3.
strUtf = ConvertCodePage("Текс с кириллицей", Win, Utf)
Textfile.WriteLine strUtf
Textfile.Close
Пустая добавленная строка.
В чем проблема ?
...
Рейтинг: 0 / 0
Сохранение в файл текста.
    #36340133
Фотография Gabit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
strWin = "Текс с кириллицей"
Textfile.WriteLine strWin   ' Эта команда записывает текст под кодировкой Windows
strUtf = ConvertCodePage(strWin, Win, Utf)
Textfile.WriteLine strUtf  ' Эта команда записывает пустую строку
...
Рейтинг: 0 / 0
Сохранение в файл текста.
    #36340136
Фотография Gabit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такой код:
Код: plaintext
1.
2.
s_utf = ConvertCodePage(s_str, Win, Utf)
MsgBox (Str(Len(s_utf)))

Показывает 0
...
Рейтинг: 0 / 0
Сохранение в файл текста.
    #36526342
Guest 22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
ConvertCodePage("Тест номер 1", Win, Utf)
Не, не работает. Пустая строка на выходе.
...
Рейтинг: 0 / 0
Сохранение в файл текста.
    #36526751
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guest 22
Код: plaintext
ConvertCodePage("Тест номер 1", Win, Utf)
Не, не работает. Пустая строка на выходе.Там накосячено с указателями на строки.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Private Declare Function MultiByteToWideChar Lib "kernel32.dll" (ByVal CodePage As Long, _
    ByVal dwFlags As Long, ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, _
    ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
Private Declare Function WideCharToMultiByte Lib "kernel32.dll" (ByVal CodePage As Long, _
    ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, _
    ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, _
    ByVal lpDefaultChar As Long, ByVal lpUsedDefaultChar As Long) As Long

Public Function EncodeUTF8(strSrc As String) As String
    Dim nLen As Long
    Dim strDst As String
    Dim strRet As String
    Dim nRet As Long
    Dim p As Long
    
    nLen = Len(strSrc)
    strDst = String(nLen *  2 , Chr( 0 ))
    strRet = String(nLen *  2 , Chr( 0 ))
    p = StrPtr(strDst)
    nRet = MultiByteToWideChar( 1251 , &H1, strSrc, nLen, p, nLen)
    nRet = WideCharToMultiByte( 65001 ,  0 , p, nRet, StrPtr(strRet), nLen *  2 , ByVal  0 ,  0 )
    EncodeUTF8 = Left$(StrConv(strRet, vbUnicode), nRet)
End Function
...
Рейтинг: 0 / 0
Сохранение в файл текста.
    #36527595
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GabitDim fso As New Scripting.FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")

Между прочим, если в первой строке есть New , то CreateObject даром не нужен.
Но ссылка в References проекта на данную библиотеку должна быть установлена.
...
Рейтинг: 0 / 0
Сохранение в файл текста.
    #36533643
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gabit, опробовал - работает:

Код: plaintext
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.
Private Declare Function MultiByteToWideChar Lib "kernel32.dll" (ByVal CodePage As Long, _
    ByVal dwFlags As Long, ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, _
    ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
Private Declare Function WideCharToMultiByte Lib "kernel32.dll" (ByVal CodePage As Long, _
    ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, _
    ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, _
    ByVal lpDefaultChar As Long, ByVal lpUsedDefaultChar As Long) As Long

Public Function EncodeUTF8(strSrc As String) As String
    Dim nLen As Long
    Dim strDst As String
    Dim strRet As String
    Dim nRet As Long
    Dim p As Long
    
    nLen = Len(strSrc)
    strDst = String(nLen *  2 , Chr( 0 ))
    strRet = String(nLen *  2 , Chr( 0 ))
    p = StrPtr(strDst)
    nRet = MultiByteToWideChar( 1251 , &H1, strSrc, nLen, p, nLen)
    nRet = WideCharToMultiByte( 65001 ,  0 , p, nRet, StrPtr(strRet), nLen *  2 , ByVal  0 ,  0 )
    EncodeUTF8 = Left$(StrConv(strRet, vbUnicode), nRet)
End Function

Sub WriteToFile()

MyFile1 = "c:\Trans.txt"
Set fso = CreateObject("Scripting.FilesystemObject")
Set Textfile = fso.OpenTextFile(MyFile1,  2 , True)

Textfile.WriteLine "encoding=""UTF-8"""
strUtf = EncodeUTF8("Текст с кириллицей")
Textfile.WriteLine strUtf
Textfile.Close

End Sub
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Сохранение в файл текста.
    #38762574
Pashy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Скажите, пжлст, можно ли изменить данный запрос, чтобы не только кириллицу читал, но и английский
Если да, то ткните носом, что-то не получается(

Заранее благодарю
...
Рейтинг: 0 / 0
Сохранение в файл текста.
    #38762718
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pashy,

Если под "читал" подразумевается запись в файл, то, например, так:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Sub WriteUTF8ToFile()

Dim adoStr As Object

Set adoStr = CreateObject("ADODB.Stream")
adoStr.Charset = "utf-8"
adoStr.Open
adoStr.WriteText "Lorem ipsum долор сит амет"
adoStr.SaveToFile "d:\temp\test.txt", adSaveCreateOverWrite

End Sub
...
Рейтинг: 0 / 0
Сохранение в файл текста.
    #38762880
Pashy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iMrTidy,

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

Мне нужно наподобие - OpenTextFile
...
Рейтинг: 0 / 0
Сохранение в файл текста.
    #38764077
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pashy,

Возможно, Вам подойдет такой вариант.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Сохранение в файл текста.
    #39230520
Aslonov M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hugo121,
Здравствуйте ! Извиняюсь, но вы не могли бы мне помочь с использованием данной функции. Мне это очень нужно, но я не знаю как его использовать.
...
Рейтинг: 0 / 0
Сохранение в файл текста.
    #39245107
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Какой именно функции? Кого его использовать? В каком вообще приложении? ... Вопросы уже риторические...
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Сохранение в файл текста.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]