Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Разбивка файла DOS / 3 сообщений из 3, страница 1 из 1
18.02.2010, 09:13
    #36476629
_Chaynik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка файла DOS
Доброго дня! Уважаемые профессионалы, подскажите, пожалуйста такую вещь. Есть файл дос. Нужно разбить его на страницы. Алгоритм следующий: ищем определенный символ, если находим, возвращаемся на строку назад, ставим символ окончания страницы. Если набралось определенное количество строк, а нужный символ не встретился, тоже ставим символ окончания страницы. И так до конца файла.
Может кто подскажет, как это реализовать?
...
Рейтинг: 0 / 0
18.02.2010, 11:22
    #36476977
GermanGM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка файла DOS
Так сойдет? Вариант разбивки выберите сами (точнее, удалите лишнее)

Код: 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.
47.
48.
49.
local lcSourceFile,lnFileHandle1,lnFileHandle2,lnStr,lnPageLenght,lcStr,lcGetStr,lcSymbol
lcStr=''
lnPageLenght= 60  && кол-во строк на странице
lcSymbol='~' && используемый в тексте символ-разделитель страниц
lcSourceFile=getfile('TXT')
if empty(lcSourceFile)
 =messagebox('Не выбран файл', 64 ,' Отмена')
 cancel
endif
lnFileHandle1=fopen(lcSourceFile)
if lnFileHandle1< 0 
 =messagebox('Ошибка открытия исходного файла', 16 ,' Ошибка')
 cancel
endif
lnFileHandle2=fcreate('c:\tmp.txt') && файл, куды пишем
if lnFileHandle2< 0 
 =messagebox('Ошибка открытия файла-приемника', 16 ,' Ошибка')
 =fclose(lnFileHandle1)
 cancel
endif
lnStr= 0 
Вариант= 2  && варианты реализации
do while !feof(lnFileHandle1)
 lcGetStr=fget(lnFileHandle1, 600 )
 lcOffset=at(lcSymbol,lcGetStr)
 if lcOffset> 0  && символ найден
  if Вариант= 1 
   *** Если строка должна дробиться символом-разделителем на  2  
   =fputs(lnFileHandle2,left(lcGetStr,lcOffset- 1 )+chr( 12 ))
   lcStr=substr(lcgetStr,lcOffset+ 1 )
   lnStr=IIF(empty(lcStr), 0 , 1 )
   =IIF(!empty(lcStr),fputs(lnFileHandle2,lcStr),.f.) && остаток строки переносится на след страницу отдельной строкой
   else
   *** перед строкой, содержащей разделитель, нужно вставить разрыв страницы
   =fputs(lnFileHandle2,chr( 12 )+lcGetStr)
   lnStr= 1 
  ***
  endif

  else
  lnStr=lnStr+ 1 
  =fputs(lnFileHandle2,lcGetStr+IIF(lnStr>=lnPageLenght,chr( 12 ),''))
  if lnStr>=lnPageLenght
   lnStr= 0 
  endif
 endif
enddo
=fclose(lnFileHandle1)
=fclose(lnFileHandle2)
=messagebox('Копирование завершено', 64 ,' Ok')
...
Рейтинг: 0 / 0
18.02.2010, 11:53
    #36477101
_Chaynik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка файла DOS
GermanGM,
Огромное спасибо, то, что надо!
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Разбивка файла DOS / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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