
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
29.01.2008, 21:20
|
|||
|---|---|---|---|
|
|||
Помогите "халявщику" в Foxpro for DOS |
|||
|
#18+
Hi All! Помогите "халявщику" в Foxpro для DOS, например 2,6!!!!!!! Задача: есть текстовый файл, который на рулоне распечатывается на матричном принтере, потом режется на куски. Необходимо средствами Fox организовать его печать на лазерном - полистовом принтере, таким образом, чтобы не разбивалась информативность. Алгоритм примерно такой - открываем файл на низком уровне, отсчитываем строки, доходим до 60-й и проверяем не начинается ли она с символа '+' (пускай это будет символ, по которому можно было ранее разрезать отпечатанный рулон на матричнике), если да, то вставляем в файл символ прогона листа и идем ДАЛЬШЕ, если нет, то идем в обратную сторону, пока не дойдем до данного символа и вставляем символ прогона листа. ДАЛЬШЕ - счетчик строки становится опять единица и идем до след. 60-й строки и т.д. до конца файла. Кто поможет, набросать кусок текста, так как совсем не понимаю, как работают функции fopen() и т.д., особенно fwrite() - никуда не записывает ;(. Может надо результат в другой файл записывать? Не дайте пропасть, и с надеждой на помощь. С уважением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2008, 07:24
|
|||
|---|---|---|---|
|
|||
Помогите "халявщику" в Foxpro for DOS |
|||
|
#18+
SSSQHi All! Помогите "халявщику" в Foxpro для DOS, например 2,6!!!!!!! Задача: есть текстовый файл, который на рулоне распечатывается на матричном принтере, потом режется на куски. Необходимо средствами Fox организовать его печать на лазерном - полистовом принтере, таким образом, чтобы не разбивалась информативность. Алгоритм примерно такой - открываем файл на низком уровне, отсчитываем строки, доходим до 60-й и проверяем не начинается ли она с символа '+' (пускай это будет символ, по которому можно было ранее разрезать отпечатанный рулон на матричнике), если да, то вставляем в файл символ прогона листа и идем ДАЛЬШЕ, если нет, то идем в обратную сторону, пока не дойдем до данного символа и вставляем символ прогона листа. ДАЛЬШЕ - счетчик строки становится опять единица и идем до след. 60-й строки и т.д. до конца файла. Кто поможет, набросать кусок текста, так как совсем не понимаю, как работают функции fopen() и т.д., особенно fwrite() - никуда не записывает ;(. Может надо результат в другой файл записывать? Не дайте пропасть, и с надеждой на помощь. С уважением. Если ты работал на С++ под ДОС, то эти функции - прямые аналоги Си-шных (вплоть до числа и порядка следования параметров). Смысл этих функций следующий: - открывается (fopen()) или создается (fcreate()) файл на диске. Чтобы система могла с ним работать, ему назначается некоторый идентификатор (хэндл, handle), который принадлежит только этому файлу и только до его закрытия. - по данному идентификатору происходит обращение к файлу на чтение (fread(), fgets()) и запись (fwrite(), fputs()). Разница между fread() и fgets() заключается в том, что fread() читает заданное число байт или до конца строки, а fgets() - только до конца строки; разница между fwrite() и fputs() заключается в том, что fwrite() записывает заданное число байт без модификации строки, а fputs() - к строке добавляет символы перевода строки и возврата каретки. - fseek() производит перемещение по файлу, fpos() - сообщает о текущей позиции указателя - fclose() - закрывает файл, освобождает его идентификатор (хэндл) и освобождает системные ресурсы, связанные с файлом. Проще всего представить работу с файлом на низком уровне как работу с магнитной лентой. Тогда положение указателя = положение головки чтения-записи относительно начала ленты... В этом случае вставка символа в какую либо позицию приведет к модификации оставшейся части файла, т.е. будут удален один из следующих за ним символов... Алгоритм здесь будет следующим: - считать информацию до требуемого места во вспомогательный файл; - вставить во вспомогательный файл необходимымй фрагмент; - скопировать во вспомогательный файл остаток исходного файла / или очередной кусок данных; - закрыть оба файла; Успехов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2008, 09:33
|
|||
|---|---|---|---|
|
|||
Помогите "халявщику" в Foxpro for DOS |
|||
|
#18+
особенно fwrite() - никуда не записывает ;(. А посмотреть и поставить правильный режим работы с файлом в функциях fcreate()/fopen() религия не позволяет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2008, 14:12
|
|||
|---|---|---|---|
|
|||
Помогите "халявщику" в Foxpro for DOS |
|||
|
#18+
SSSQHi All! Задача: есть текстовый файл, который на рулоне распечатывается на матричном принтере, потом режется на куски. Необходимо средствами Fox организовать его печать на лазерном - полистовом принтере, таким образом, чтобы не разбивалась информативность. Алгоритм примерно такой - открываем файл на низком уровне, отсчитываем строки, доходим до 60-й и проверяем не начинается ли она с символа '+' (пускай это будет символ, по которому можно было ранее разрезать отпечатанный рулон на матричнике), если да, то вставляем в файл символ прогона листа и идем ДАЛЬШЕ, если нет, то идем в обратную сторону, пока не дойдем до данного символа и вставляем символ прогона листа. ДАЛЬШЕ - счетчик строки становится опять единица и идем до след. 60-й строки и т.д. до конца файла. Кто поможет, набросать кусок текста, так как совсем не понимаю, как работают функции fopen() и т.д., особенно fwrite() - никуда не записывает ;(. Может надо результат в другой файл записывать? Не дайте пропасть, и с надеждой на помощь. С уважением. _max_dlina=8 && число строк на листе _file1="test.txt" && исходный и выходной файлы _file2="test.out" fi=fopen(_file1) fo=FCREATE(_file2) i=0 _str="" do while !feof(fi) _str=fgets(fi) i=i+1 if left(_str,1)="+" _str=chr(12) && всместо строки с "+" пишем перевод страницы =fputs(fo,_str) i=0 else =fputs(fo,_str) if i=_max_dlina =fputs(fo,chr(12)) i=0 endif endif enddo if left(_str,1)!="+" and i!=_max_dlina =fputs(fo,chr(12)) endif =fclose(fi) =fclose(fo) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2008, 15:49
|
|||
|---|---|---|---|
|
|||
Помогите "халявщику" в Foxpro for DOS |
|||
|
#18+
Уважаемы s_gonch! Тысяча благодарностей за ваш код. Однако чуть-чуть не то. Ниже объясню: _max_dlina=8 && число строк на листе _file1="test.txt" && исходный и выходной файлы _file2="test.out" fi=fopen(_file1) fo=FCREATE(_file2) i=0 _str="" do while !feof(fi) _str=fgets(fi) i=i+1 if left(_str,1)="+" _str=chr(12) && всместо строки с "+" пишем перевод страницы =fputs(fo,_str) i=0 else =fputs(fo,_str) if i=_max_dlina А вот здесь надо идти вверх назад по файлу и искать последний "+" и на него ставить chr(12). И с него опять вниз начинать отсчет i=0. А как ? =fputs(fo,chr(12)) i=0 endif endif enddo if left(_str,1)!="+" and i!=_max_dlina =fputs(fo,chr(12)) endif =fclose(fi) =fclose(fo) С уважением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.01.2008, 07:28
|
|||
|---|---|---|---|
|
|||
Помогите "халявщику" в Foxpro for DOS |
|||
|
#18+
SSSQHi All! Помогите "халявщику" в Foxpro для DOS, например 2,6!!!!!!! Задача: есть текстовый файл, который на рулоне распечатывается на матричном принтере, потом режется на куски. Необходимо средствами Fox организовать его печать на лазерном - полистовом принтере, таким образом, чтобы не разбивалась информативность. Алгоритм примерно такой - открываем файл на низком уровне, отсчитываем строки, доходим до 60-й и проверяем не начинается ли она с символа '+' (пускай это будет символ, по которому можно было ранее разрезать отпечатанный рулон на матричнике), если да, то вставляем в файл символ прогона листа и идем ДАЛЬШЕ, если нет, то идем в обратную сторону, пока не дойдем до данного символа и вставляем символ прогона листа. ДАЛЬШЕ - счетчик строки становится опять единица и идем до след. 60-й строки и т.д. до конца файла. Кто поможет, набросать кусок текста, так как совсем не понимаю, как работают функции fopen() и т.д., особенно fwrite() - никуда не записывает ;(. Может надо результат в другой файл записывать? Не дайте пропасть, и с надеждой на помощь. С уважением. Что-то я не понял Вашего алгоритма (перепишу его в алгоритмическом виде с урезанием некоторых деталей): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Предложенный s_gonch алгоритм (перепишу его в алгоритмическом виде с урезанием некоторых деталей): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. P.S.: Не пытайтесь сразу отвергнуть, а попытайтесь понять... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.01.2008, 10:27
|
|||
|---|---|---|---|
Помогите "халявщику" в Foxpro for DOS |
|||
|
#18+
Кажется, SSSQ хотел чуть другую вещь. Я понял так. Пусть файл такой структуры: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Этот алгоритм можно реализовать в один проход. Установить счетчик строк i в 0. Открыть файл in. Создать пока пустой файл out. Читать файл in построчно (учитывая возможность переноса строки при превышении символов в ней над колонками на странице, либо перенося на новую строку, либо обрезая хвосты длинных строк). Новую строку сохранить в переменную z. Пока не достигнуты условия переноса на следующую страницу, увеличивать счетчик i на 1. Если первый символ в новой строке = "+" и количество строк на странице меньше максимума, присвоить переменной j значение 1. Добавить значение переменной y к x. Присвоить значение переменной z переменной y. Иначе переменную j увеличить на 1, а значение переменной z добавить к y. Если i превысил максимальное количество строк на листе, то сбросить значение переменной x в файл out, дописав в конец символ прогона листа. после чего переменной х присвоить пустое значение, а переменной i присвоить значение j, так как в переменной y уже находится j строк, которые будут уже на новой странице. Надо еще разрулить ситуацию, когда строк второго уровня больше чем строк на листе. Или в этом случае печатать не будем? ;-) ________ Не дадим распространиться заразе политкорректности! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.01.2008, 10:28
|
|||
|---|---|---|---|
Помогите "халявщику" в Foxpro for DOS |
|||
|
#18+
PS: и последнюю страницу к файлу out не забыть приписать, когда файл in кончится ;-) PPS: и файлы закрыть ________ Не дадим распространиться заразе политкорректности! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.01.2008, 12:07
|
|||
|---|---|---|---|
|
|||
Помогите "халявщику" в Foxpro for DOS |
|||
|
#18+
SSSQУважаемы s_gonch! Тысяча благодарностей за ваш код. Однако чуть-чуть не то. Видимо, так подойдет больше. Код: 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. Можно попробовать иначе, не дергать указатель файла вообще. Код: 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. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=41&mobile=1&tid=1588209]: |
0ms |
get settings: |
6ms |
get forum list: |
8ms |
check forum access: |
1ms |
check topic access: |
2ms |
track hit: |
46ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
29ms |
get tp. blocked users: |
1ms |
| others: | 220ms |
| total: | 322ms |

| 0 / 0 |
