powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как задать кодировку файла
20 сообщений из 20, страница 1 из 1
Как задать кодировку файла
    #38609562
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот начал писать типа
SET ALTERNATE TO "xxxx.txt"
SET ALTERNATE ON
<?xml version="1.0" encoding="windows-1251"?>
Но получившийся файл не будет иметь такой кодировки(скорей всего 866)
1.Как проверить(какой функцией или утилитой) кодировку получившегося файла
2. как установить кодировку у получившегося файла 1251
...
Рейтинг: 0 / 0
Как задать кодировку файла
    #38609583
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никак. В текстовом файле кодировка нигде не хранится. Разве что эвристический анализатор написать.

Если нужна 866 то сначала конвертируй cpconvert() а потом пиши.
...
Рейтинг: 0 / 0
Как задать кодировку файла
    #38609597
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет нужна 1251, но как тогда например заходишь в FAR в редактор(F4), он показывает кодировку или DOS или WIN, по каким-то признакам он определяет кодировку...
...
Рейтинг: 0 / 0
Как задать кодировку файла
    #38609602
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и ещё вопрос, почему то SET ALTERNATE ON добавляет пустую строчку вначале, какой опцией можно сделать, чтоб не добавлялась пустая строка...
...
Рейтинг: 0 / 0
Как задать кодировку файла
    #38609652
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1нет нужна 1251, но как тогда например заходишь в FAR в редактор(F4), он показывает кодировку или DOS или WIN, по каким-то признакам он определяет кодировку...Анализом некоторого количества первых символов текста. Еще раз - в текстовом файле нет указаний на кодировку.
...
Рейтинг: 0 / 0
Как задать кодировку файла
    #38609658
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1и ещё вопрос, почему то SET ALTERNATE ON добавляет пустую строчку вначале, какой опцией можно сделать, чтоб не добавлялась пустая строка...Потому, что так задумано. Не надо пользоваться давно устаревшими командами. Пользуйтесь TEXTMERGE, set text и т.д.
...
Рейтинг: 0 / 0
Как задать кодировку файла
    #38609668
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1нет нужна 1251,
Тогда не надо никаких конвертаций, фокс изначально работает в 1251 и будет писать в 1251
q1w1e1но как тогда например заходишь в FAR в редактор(F4), он показывает кодировку или DOS или WIN, по каким-то признакам он определяет кодировку...
Если заметил - то не всегда определяет и приходится нажимать F8 чтобы переключиться. Это и есть эвристический анализ: выделяем коды символов которые в одной кодировке - буквы, в другой кракозябры. Смотрим что встречается в файле и по наличию таких кодов делаем предположение в пользу одной из кодировок.
q1w1e1и ещё вопрос, почему то SET ALTERNATE ON добавляет пустую строчку вначале, какой опцией можно сделать, чтоб не добавлялась пустая строка...
Может уже пора забыть про это наследие FPD ? Можно сформировать все в переменной и потом записать в файл.
Код: sql
1.
2.
3.
4.
5.
6.
lcEnter = chr(13) + chr(10)
lcText = '<?xml version="1.0" encoding="windows-1251"?>' + lcEnter
lcText = lcText + 'Какой-то текст' + lcEnter
if StrToFile(lcText, 'xxxx.txt') > 0
  ? 'Файл создан'
endif
...
Рейтинг: 0 / 0
Как задать кодировку файла
    #38609709
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Функцией StrToFile() не пользовался(или польщовался, но по каким-то причинам она не устроила)... какого размера эта функция позволяет скопировать переменную в файл, если у меня 1000000 строк (каждый работник со своим стажем) сможет ли эта функция преобразовать такую переменную в файл...

и ещё один вопрос...
тут страховой номер как-то надо сделать по правилам, в dbf это число, и преобразовать надо в строку вида ххх-ххх-ххх хх, конечно можно преобразовать число в строку, потом порезать на кусочки и затем склеить... но может также отбросить это "наследие прошлого"... есть более удобоваримая функция?..:-)
...
Рейтинг: 0 / 0
Как задать кодировку файла
    #38609724
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1Функцией StrToFile() не пользовался(или польщовался, но по каким-то причинам она не устроила)... какого размера эта функция позволяет скопировать переменную в файл, если у меня 1000000 строк (каждый работник со своим стажем) сможет ли эта функция преобразовать такую переменную в файл...Неужели так трудно попробовать? Несколько мегабайт точно работают. В конце концов, предложенный мной вариант не зависит от размера конечного файла.
и ещё один вопрос...
тут страховой номер как-то надо сделать по правилам, в dbf это число, и преобразовать надо в строку вида ххх-ххх-ххх хх, конечно можно преобразовать число в строку, потом порезать на кусочки и затем склеить... но может также отбросить это "наследие прошлого"... есть более удобоваримая функция?..:-)Transform() покури. И заметь, все предложенное мной работало еще в FPD.
...
Рейтинг: 0 / 0
Как задать кодировку файла
    #38609732
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо Сергей, правда в этой теме я не нашёл предложенного...:-)
...
Рейтинг: 0 / 0
Как задать кодировку файла
    #38609739
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1Спасибо Сергей, правда в этой теме я не нашёл предложенного...:-)Что не нашел? SET TEXT?
...
Рейтинг: 0 / 0
Как задать кодировку файла
    #38609764
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
делаю
insurance= 84488132
?TRANSFORM(insurance,"999-999-999"), получаю
84-488-132, а нужно 084-488-132, как надо TRANSFORM?
...
Рейтинг: 0 / 0
Как задать кодировку файла
    #38609770
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на сайте http://www.foxclub.ru/rhproject/project/
set text не нашёл...
...
Рейтинг: 0 / 0
Как задать кодировку файла
    #38609777
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1Функцией StrToFile() не пользовался(или польщовался, но по каким-то причинам она не устроила)... какого размера эта функция позволяет скопировать переменную в файл, если у меня 1000000 строк (каждый работник со своим стажем) сможет ли эта функция преобразовать такую переменную в файл...
Функция сможет, только формирование в переменной заметно тормозить может. Будет тормозить - частями писать
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
lcEnter = chr(13) + chr(10)
lcText = '<?xml version="1.0" encoding="windows-1251"?>' + lcEnter
if StrToFile(lcText, 'xxxx.txt') > 0
  ? 'Файл создан'
endif
lcText = 'Какой-то текст' + lcEnter
if StrToFile(lcText, 'xxxx.txt', .T.) > 0
  ? 'Файл дополнен'
endif



q1w1e1есть более удобоваримая функция?..:-)
Код: sql
1.
? transform(1234567890, '999-999-999 99')
...
Рейтинг: 0 / 0
Как задать кодировку файла
    #38609795
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1делаю
insurance= 84488132
?TRANSFORM(insurance,"999-999-999"), получаю
84-488-132, а нужно 084-488-132, как надо TRANSFORM?
Код: sql
1.
? padl(alltrim(transform(insurance, '999-999-999 99')), 14, '0')


Лучше свою функцию напиши, т.к. под нестандартные задачи не всегда есть готовые решения.
...
Рейтинг: 0 / 0
Как задать кодировку файла
    #38609799
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

спасибо, вот только с transform, надо чтоб
? transform(1234567890, '999-999-999 99') && Display 12-345-678-90, а надо 012-345-678-90
...
Рейтинг: 0 / 0
Как задать кодировку файла
    #38609803
GermanGM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1делаю
insurance= 84488132
?TRANSFORM(insurance,"999-999-999"), получаю
84-488-132, а нужно 084-488-132, как надо TRANSFORM?


Код: sql
1.
2.
insurance= 1234567890 && (необходимо добавить лидирующий "0")
?TRANSFORM(insurance,"@L 999-999-999 99")
...
Рейтинг: 0 / 0
Как задать кодировку файла
    #38609805
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,
спасибо, вопросов пока больше нет...
...
Рейтинг: 0 / 0
Как задать кодировку файла
    #38609953
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1на сайте http://www.foxclub.ru/rhproject/project/
set text не нашёл...
А почему я нашел?
Цитата из приведенной ссылки:

Visual FoxPro 9.0 Руководство по языку
Команда SET TEXTMERGE
См.также
Скрыть все
Разрешает или запрещает вычисление значения полей, переменных, элементов массивов, функций и выражений, которые заключены в разделители, определяющие границы для слияния текста, а также определяет, куда направлять вывод результатов слияния текста.

SET TEXTMERGE [ON | OFF] [TO [FileName] MEMVAR VarName [ADDITIVE]]
[WINDOW WindowName] [SHOW | NOSHOW]
Параметры
ON

Определяет, что поля, переменные, элементы массивов, функции и выражения, заключенные в разделители, задающие границы слияния текста вычисляются и выводятся, если они помещены в строках после символов \ или \\, либо в строках, находящихся между командами TEXT и ENDTEXT. Следующий короткий пример программы показывает, как содержимое переменной gcTodayDate и значения, возвращаемые функциями DATE( ) и TIME( ) вычисляются, когда командой SET TEXTMERGE задана установка ON. Переменная gcTodayDate, функции DATE( ) и TIME( ) вычисляются потому, что они заключены в разделители, задающие границы текстового слияния и команда SET TEXTMERGE задает установку ON.
Скопировать код
CLEAR
SET TALK OFF
STORE 'Сегодня: ' TO gcTodayDate
SET TEXTMERGE ON
\<<gcTodayDate>>
\\<<DATE( )>>
\Время:
\\ <<TIME( )>>
Здесь показан результат вывода при запуске программы 1 января 1998г:
Скопировать код
Сегодня: 01/01/98
Время: 10:55:19
OFF

(По умолчанию) Определяет, что поля, переменные, элементы массивов, функции и выражения выводятся так, как они записаны вместе с окружающими их разделителями, задающими границы слияния текста. Отметьте разницу в выводе результатов по сравнению с предыдущим примером когда командой SET TEXTMERGE задана установка OFF:
Скопировать код
CLEAR
SET TALK OFF
STORE 'Сегодня: ' TO gcTodayDate
SET TEXTMERGE OFF
\<<gcTodayDate>>
\\<<DATE( )>>
\Время:
\\ <<TIME( )>>
Здесь показан результат вывода этой программы:
Скопировать код
<<gcTodayDate>><<DATE( )>>
Время: <<TIME( )>>
TO [ FileName]

Определяет что вывод из строк, начинающихся символами \, \\ или находящихся между командами TEXT ... ENDTEXT направляется в текстовый файл. Помимо основного окна Visual FoxPro, куда текст по умолчанию направляется всегда, вы также можете направить вывод в текстовый файл, указав его имя в FileName. Если файл с указанным именем не существует, будет создан новый файл. Если файл с таким именем уже имеется и командой SET SAFETY задана установка ON, вы получите возможность перезаписать существующий файл. Текстовый файл открывается на низком уровне (low-level) и его дескриптор (handle) запоминается в системной переменной _TEXT. Вы можете закрыть файл, использовав команду SET TEXTMERGE TO без дополнительных аргументов. Если в системной переменной _TEXT ранее был запомнен дескриптор другого файла, этот файл будет закрыт.
MEMVAR VarName

Определяет имя переменной, в которую направляются результаты, получаемые при выводе посредством TEXTMERGE. Поскольку команда SET TEXTMERGE имеет глобальный диапазон действия и может распространяться на несколько процедур или методов, переменная, указанная в MEMVAR VarName может оказаться в некоторых из них недоступной. Но и в этом случае команда будет выполняться, ничего не направляя на вывод. Вы можете управлять видимостью MEMVAR VarName, объявляя переменную как PUBLIC или PRIVATE (а также LOCAL - прим. переводчика). Эта фраза может также приводить к рекурсии, которую вы можете предотвратить при помощи команды SET TEXTMERGE TO, как показано в в следующем примере:
Скопировать код
USE LABELS
STORE "" to myVar, myVar2

SET TEXTMERGE ON TO MEMVAR myVar && Выполнение TEXTMERGE начинается со следующей строки

\Hey Now
\<<date()>>

SCAN
\ <<name>>
ENDSCAN

* Удалите комментарий со строки, содержащей SET TEXTMERGE TO предотвращая ошибку рекурсии
* с переменными myVar и myVar2.
* SET TEXTMERGE TO

TEXT TO myVar2
<b> Здесь кое-что на HTML. </b>
Это HTML
<<date()>>
ENDTEXT

SET TEXTMERGE OFF
USE

CLEAR
? myVar && Результат TEXTMERGE помещен в переменные
? myVar2
ADDITIVE
Определяет что вывод из строк, начинающихся символами \, \\ или находящихся между командами TEXT ... ENDTEXT добавляется к содержимому существующего файла или переменной памяти. Для дальнейшей информации по направлению вывода при слиянии текста см. _TEXT System Variable.

WINDOW WindowName
Определяет что вывод из строк, начинающихся символами \, \\ или находящихся между командами TEXT ... ENDTEXT направляется в определенное пользователем окно, а не в главное окно Visual FoxPro, как это принято по умолчанию. WindowName определяет имя окна, в которое направляется вывод. Окно должно быть создано командой DEFINE WINDOW перед тем, как в него будет направлен вывод. Окно обязательно должно быть активным или видимым.
SHOW | NOSHOW

(По умолчанию) SHOW делает видимым вывод результатов текстового слияния. NOSHOW подавляет вывод результатов. По умолчанию вывод, формируемый командами \, \\ и TEXT ... ENDTEXT посылается в главное окно Visual FoxPro или активное окно, определенное пользователем.
Замечания

Команды \, \\ и TEXT ... ENDTEXT используются для слияния текста с содержимым таблиц, переменных, элементов массивов, значений, возвращаемых функциями и выражений. Если поле, переменная, элемент массива, функция или выражение заключено в ограничители, определяющие текстовое слияние (по умолчанию << и >>), оно может быть вычислено и слито с текстом. Эта возможность позволяет вам создавать письма, программы и шаблоны для создания программ.

Коменда SET TEXTMERGE определяет, как вычисляются поля, переменные, элементы массива, функции или выражения, заключенные в ограничители, определяющие текстовое слияние. Она также позволяет вам направлять вывод в главное окно Visual FoxPro, окно, определенное пользователем или в файл.

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

См.также

Команды \ | \\
Системная переменная _PRETEXT
Команда SET TEXTMERGE DELIMITERS
Функция TEXTMERGE( )
Команда TEXT ... ENDTEXT
Команды
Справка по языку
...
Рейтинг: 0 / 0
Как задать кодировку файла
    #38610640
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey Sizov,

очевидное, невероятное...
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как задать кодировку файла
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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