Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как перекодировать тексовый файл? / 22 сообщений из 22, страница 1 из 1
21.06.2006, 23:50
    #33807258
Dik76
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перекодировать тексовый файл?
Есть файл в кодировке ASCII (DOS). Как его перекодировать в ANSI ?
Сразу оговорюсь, что файл большой > 500Мб.
Спасибо.
...
Рейтинг: 0 / 0
22.06.2006, 08:11
    #33807419
--Eugene--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перекодировать тексовый файл?
Dik76Есть файл в кодировке ASCII (DOS). Как его перекодировать в ANSI ?
Сразу оговорюсь, что файл большой > 500Мб.
Спасибо.
пользуй функции
FOPEN(), FCREATE(), FGET()/FPUT() (или FGETS()/PUTS()) , OEMTOANSI()

тока задержка, конечно, будет офигительная
...
Рейтинг: 0 / 0
22.06.2006, 08:42
    #33807460
Dik76
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перекодировать тексовый файл?
Пытаюсь с MODIFY FILE (lcFileOut) AS 1251 медитировать, но что то не получается...
...
Рейтинг: 0 / 0
22.06.2006, 08:59
    #33807500
piva
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перекодировать тексовый файл?
Тогда уже открыть как Modify File ... as 866
потом через меню Save As - кнопочка Code Page ставишь 1251
...
Рейтинг: 0 / 0
22.06.2006, 09:06
    #33807513
Dik76
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перекодировать тексовый файл?
К сожалению мне надо сделать конвертацию программно. Видимо придется делать как --Eugene-- посоветовал. С dbf подобные преобразования удобно сделаны, думал, что с текстом так же будет...
...
Рейтинг: 0 / 0
22.06.2006, 10:35
    #33807753
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перекодировать тексовый файл?
Ни с обычным файлом, ни с DBF "по простому" ничего не выйдет.

Если надо изменить кодировку содержимого файла, то придется перелопачивать весь файл. Просто изменив какой-то признак - не получится.

Программа CPZERO.PRG для DBF файлов НЕ МЕНЯЕТ кодировку. Она всего-лишь устанавливает признак, который говорит о том, в какой кодировке надо читать информацию из этого файла. Но саму кодировку содержимого НЕ МЕНЯЕТ.
...
Рейтинг: 0 / 0
22.06.2006, 10:42
    #33807781
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перекодировать тексовый файл?
Да, если объем файла не превышает 2ГБ, то можно сделать конвертацию так:

Код: plaintext
1.
2.
3.
4.
CREATE CURSOR curTest (Content M)
APPEND BLANK
APPEND MEMO Content FROM "C:\MyDir\MyFile.txt" AS  866 
COPY MEMO Content TO "C:\MyDir\MyFile.txt" AS  1251 

Т.е. "прокачать" его через мемо-поле. Правда, опция AS в командах APPEND MEMO и COPY MEMO появилась только в версии VFP3. Если речь идет о FD2.x, то придется сначала ручками сконвертировать содержимое мемо-поля, а потом уже копировать.
...
Рейтинг: 0 / 0
22.06.2006, 10:46
    #33807801
Dik76
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перекодировать тексовый файл?
to ВладимирМ
К счастью у меня vfp 8 :)
Попробую сделать по вашему примеру. О результатах доложу.
...
Рейтинг: 0 / 0
22.06.2006, 11:12
    #33807913
sergej_57
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перекодировать тексовый файл?
А если использовать функцию FILETOSTR(cFileName) файл представить как переменная, обработать его как переменную и дальше ее обрабатывать ?
...
Рейтинг: 0 / 0
22.06.2006, 14:30
    #33808830
AlikWishin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перекодировать тексовый файл?
я работаю так:
Код: plaintext
1.
2.
3.
4.
lcFile = Filetostr(fName)
Wait Window 'Перекодування файлу '+Lower(Juststem(fName))+'...' Nowait
lcFile	=	Cpconvert( 1251 , 866 ,lcFile) &&Cpconvert( 866 , 1251 ,lcFile) обротный транскод
Strtofile(lcFile, fName)
Пока проблем не возникало
...
Рейтинг: 0 / 0
22.06.2006, 14:35
    #33808842
Dik76
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перекодировать тексовый файл?
>AlikWishin
Спасибо!
...
Рейтинг: 0 / 0
23.06.2006, 15:31
    #33811754
Dik76
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перекодировать тексовый файл?
Результаты:
Тест проводился на txt файле размером 250Мб.

1. Вариант предложенный ВладимирМ - 30-40 сек.
2. Выриант предложенный AlikWishin - 3мин.15сек. - 3мин.25сек.

Всем спасибо. Взял 1-й вариант :)
...
Рейтинг: 0 / 0
24.06.2006, 17:09
    #33813020
AlikWishin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перекодировать тексовый файл?
Dik76Результаты:
Тест проводился на txt файле размером 250Мб.

1. Вариант предложенный ВладимирМ - 30-40 сек.
2. Выриант предложенный AlikWishin - 3мин.15сек. - 3мин.25сек.

Всем спасибо. Взял 1-й вариант :)

Ну мне до Владимира Максимова еще лет и лет!
...
Рейтинг: 0 / 0
24.06.2006, 18:25
    #33813060
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перекодировать тексовый файл?
Hi Dik76!

Да, если переменная памяти получается "нестандартная" (более 16Мб) то работа
с ней будет заметно тормозить - кстати удивительно что вообще работает -
большинство функций с такими монстроидальными строками не хотят работать.
Проблема с memo - двойная (или даже тройная) прогонка данных через диск
(особенно если памяти на машине не хватает чтоб всё в кэше поместилось).
Возможно что более низкоуровневый вариант (те-же FREAD/FWRITE) окажется ещё
быстрее - но конечно заметно массивнее код будет :)

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
26.06.2006, 15:28
    #33814707
S866
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перекодировать тексовый файл?
Насчет низкого уровня Вот код на суд общественности

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
fname=getfile()
hout=fcreate('c:\windocs.win')
handl=fopen(fname)
tn=seconds()
do while not feof(handl)
strinput=fread(handl, 8 * 1024 )
stroutput=cpconvert( 866 , 1251 ,strinput)
=fwrite(hout,stroutput,len(stroutput))
enddo
tk=seconds()
=fclose(hout)
=fclose(handl)
wait wind str(tk-tn)+' секунд'

файл 354мб P4 -1500 win98 = 57 секунд

оформите в класс и подберите параметр 8*1024
у меня вышли следующие значения

1к - 69 сек
4к - 63 сек
8к - 57 сек
16к - 69 сек
мне кажется что размер блока чтения надо оптимизировать под файловую систему и размер страницы кэша windows.
...
Рейтинг: 0 / 0
27.06.2006, 01:15
    #33815664
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перекодировать тексовый файл?
Hi S866!

Ты бы прогнал все остальные варианты на этом файле - и результат показал :)
Возможно будет иметь значение режим открытия файлов...

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
27.06.2006, 09:14
    #33815854
S866
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перекодировать тексовый файл?
2 Igor Korolyov
а зачем прогонять - немного выше товарищ Dik76 уже прогнал - и результаты опубликовал
Код: plaintext
1.
2.
3.
4.
5.
6.
Результаты:
Тест проводился на txt файле размером 250Мб.

 1 . Вариант предложенный ВладимирМ -  30 - 40  сек.
 2 . Выриант предложенный AlikWishin - 3мин.15сек. - 3мин.25сек.

Всем спасибо. Взял  1 -й вариант :)

насчет режима открытия файлов - абсолютно согласен с Вами тоже необходимо подобрать.
...
Рейтинг: 0 / 0
29.06.2006, 02:09
    #33820570
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перекодировать тексовый файл?
Hi S866!

> а зачем прогонять - немного выше товарищ Dik76 уже прогнал - и результаты
> опубликовал

Потому что он сравнил лишь 2 способа - сопоставлять же его результаты с
твоими "напрямую" никак нельзя - и файл другой и машина тоже другая...

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
07.08.2015, 11:13
    #39024856
asai9493
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перекодировать тексовый файл?
Привет Всем !!. Не знаю, может и не по теме, но на Вас последняя надежда.
Мне нужно открыть файл dbf формата. Пробовал все программы, какие только есть- fox pro, dbf manager, excell, total commander.... все напрасно. Файл dbf открывают, но вот только появляются ????. Думаю, скорее всего это файл из далекого прошлого....
Кто знает решение... помогите. НУжно срочно!
...
Рейтинг: 0 / 0
07.08.2015, 12:30
    #39024953
Как перекодировать тексовый файл?
asai9493Привет Всем !!. Не знаю, может и не по теме, но на Вас последняя надежда.
Мне нужно открыть файл dbf формата.Точно формата? Или таки с расширением dbf? Пробовал все программы, какие только естьТочно ВСЕ?- fox pro, dbf manager, excell, total commander.... все напрасно. Файл dbf открывают, но вот только появляются ????.Куча знаков вопроса в полях? Если да, то есть большая вероятность неправильного создания этого файла и это никакими перекодировками не исправится ибо знак вопроса в любой кодировке есть знак вопроса. Думаю, скорее всего это файл из далекого прошлого....На каком основании так думаете? В общем-то, файлики как раз из далекого прошлого все уже умеют открывать. Это вот про новые фичи не все могут знать и потому не отрывать.Кто знает решение...Решения ЧЕГО? Открытия неизвестно какого файла неизвестной структуры с неизвестным содержимым? помогите. НУжно срочно!Содержимое файлика предлагается угадать? И на основе угаданного порассуждать про сферический файлик в вакууме?
...
Рейтинг: 0 / 0
07.08.2015, 13:37
    #39025015
Crispy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перекодировать тексовый файл?
Для начала стоит посмотреть заголовок файла и сравнить со стандартными форматами для dbf.
Смотреть лучше всего в Hex-редакторе. По удобству использования я бы рекомендовал WinHex - поиском по инету думаю нетрудно найти хорошую ;) версию, либо, если вдруг есть такое желание - можно конечно и купить его. :)
После открытия файла, следует обратить внимание в первую очередь на две первые 16-ричные цифры.
В зависимости от них файл относится к типам:
02 - FoxBASE
03 - FoxBASE+/Dbase III plus, нет memo
30 - Visual FoxPro
31 - Visual FoxPro, поддержка свойства autoincrement
32 - Visual FoxPro, поддержка полей типа Varchar, Varbinary, или Blob
43 - dBASE IV SQL табличный файл, нет memo
63 - dBASE IV SQL системный файл, нет memo
83 - FoxBASE+/dBASE III PLUS, с memo
8B - dBASE IV с memo
CB - dBASE IV SQL табличный файл, с memo
F5 - FoxPro 2.x (или младше) с memo
FB - FoxBASE

Ну а после определения типа, можно посмотреть и остальное. Опять же - продолжая с заголовка - первых нескольких строк. Кроме того - вместо знаков вопроса еще ниже, под заголовком, где идут по порядку записи всех полей, можно увидеть выражение полей в 16-ричном виде и понять, что же там находится.
...
Рейтинг: 0 / 0
07.08.2015, 16:31
    #39025215
FBoris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перекодировать тексовый файл?
Попробуйте опен офис, когда открываешь должен предложить кодовую страницу. Только сделайте предварительно копию файла, т.к. если не в той откроешь, то будут другие вопросики и настройки кодировки сохранятся.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как перекодировать тексовый файл? / 22 сообщений из 22, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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