Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Сохранение в файл текста. / 24 сообщений из 24, страница 1 из 1
15.10.2005, 17:17
    #33326541
zPu1sarz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение в файл текста.
Помогите чайнику!
Есть переменная типа стринг, в ней есть русские буквы, как сохранить её в файл(temp.txt), кодировка UTF-8 обязательна
...
Рейтинг: 0 / 0
17.10.2005, 11:52
    #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
17.10.2005, 11:59
    #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
Период между сообщениями больше года.
30.11.2009, 13:27
    #36338802
Gabit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение в файл текста.
Хотел использовать вышеуказанный пример.
Выдает ошибку: Variable not defined
Как решить проблему ?
...
Рейтинг: 0 / 0
30.11.2009, 13:44
    #36338849
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение в файл текста.
GabitХотел использовать вышеуказанный пример.
Выдает ошибку: Variable not defined
Как решить проблему ?

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

Если не скажете, на какую именно переменную ругается, то вряд ли кто-то тут будет пытаться экстасенсизмом.
...
Рейтинг: 0 / 0
30.11.2009, 14:41
    #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
30.11.2009, 14:43
    #36339049
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение в файл текста.
попробуйте

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

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

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

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

Показывает 0
...
Рейтинг: 0 / 0
17.03.2010, 15:02
    #36526342
Guest 22
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение в файл текста.
Код: plaintext
ConvertCodePage("Тест номер 1", Win, Utf)
Не, не работает. Пустая строка на выходе.
...
Рейтинг: 0 / 0
17.03.2010, 17:07
    #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
18.03.2010, 10:12
    #36527595
AndrF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение в файл текста.
GabitDim fso As New Scripting.FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")

Между прочим, если в первой строке есть New , то CreateObject даром не нужен.
Но ссылка в References проекта на данную библиотеку должна быть установлена.
...
Рейтинг: 0 / 0
22.03.2010, 00:16
    #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
Период между сообщениями больше года.
30.09.2014, 19:33
    #38762574
Pashy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение в файл текста.
Скажите, пжлст, можно ли изменить данный запрос, чтобы не только кириллицу читал, но и английский
Если да, то ткните носом, что-то не получается(

Заранее благодарю
...
Рейтинг: 0 / 0
30.09.2014, 23:45
    #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
01.10.2014, 09:51
    #38762880
Pashy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение в файл текста.
iMrTidy,

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

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

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


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