Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 05.05.2012
Сообщений: 19

Как бороться с ленью?

29.11.2013, 20:09. Показов 910. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Простенький пример, копирует содержимое одного файла в другой (разметка в самом сообщении почему-то поплыла, хотя в окошке редактирования сообщеяния все ок, но тут интуитивно все понятно):
Haskell
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
import System.IO
import System.Directory
myCopyFile :: Handle -> Handle -> IO ()
myCopyFile src dst
        = do body <- hGetContents src
               hClose src
               hPutStr dst body
               hClose dst
               putStr ("File was written ")
 
getSrc :: IO Handle
getSrc  = do putStr "Введите источник: "
                  src <- getLine
                  catch (openFile src ReadMode)
                           (\e -> do putStr ("Repeat")
                                        getSrc)
getDst :: IO Handle
getDst = do putStr "Введите приемник: "
                dst <-getLine
                catch (openFile dst WriteMode)
                        (\e -> do putStr ("Repeat")
                                     getDst)
main :: IO ()
main = do src <- getSrc
              dst <- getDst
              catch (myCopyFile src dst)
                       (\e -> do putStr ("abc" ++ show e)
                                    main)
Все ок, кроме одного НО, если приёмником и источником указать один и тот же файл, то после операции он будет пустым. Я правильно понял, что происходит это от того, что на самом деле чтение происходит тогда, когда содержимое строки уже сохраняется в целевой файл, а так как ф-ция открытия транкует файл, то в итоге файл получается пустым. Я понимаю, что в начале можно тупо проверить источник/приемник на равенство, но есть ли более изящные пути?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.11.2013, 20:09
Ответы с готовыми решениями:

Как бороться с F5?
Всем привет. Есть форма, нажав на кнопочку, происходит занесение в БД инфы. При нажатии на F5 или значок &quot;обновить&quot; вылазит...

Как бороться со взломщиками?
Есть программы, которые подбирают логин-пароль. Как с ними на сервере бороться? В общих чертах понятно, но наверное есть наработанные ходы?

Как бороться с DDos?
Заметил, что CPU начал активно работать, касперский начал флудить своими сообщениями о DOS на порт который использовал &quot;Игровой центр...

2
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38193 / 21126 / 4309
Регистрация: 12.02.2012
Сообщений: 34,732
Записей в блоге: 14
29.11.2013, 20:27
А не задумывались, почему команда copy не дает скопировать файл в себя? И что "тупого" в такой проверке?
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
30.11.2013, 06:39
Цитата Сообщение от LIKAN_BLK Посмотреть сообщение
Я понимаю, что в начале можно тупо проверить источник/приемник на равенство, но есть ли более изящные пути?
Так и нужно делать, реальные утилиты (cp в Linux, например), делают проверку.

Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import System.IO
import System.Environment
import System.Exit
 
import Text.Printf
 
copy :: FilePath -> FilePath -> IO ()
copy from to = readFile from >>= writeFile to
 
die :: String -> IO ()
die msg = hPutStrLn stderr msg >> exitFailure
 
main :: IO ()
main = do
  args <- getArgs
  case args of
    [from, to] -> if from == to
                 then die $ printf "`%s` and `%s` are the same file" from to
                 else copy from to
    otherwise  -> getProgName >>= die . printf "Usage: %s FROM TO"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.11.2013, 06:39
Помогаю со студенческими работами здесь

Подскажите как бороться
Продвигал каждую страницу по определенному запросу (обмен многолинковыми ссылками) 5-ая страница была на первом месте по пятому запросу,...

Как бороться с неплатежами?
Ситуация - клиент заносит бабла за первый месяц. Вытаскиваем его на свет божий. Проходит месяц, приходим за деньгами за второй месяц. Тут...

Как с этим бороться???
Проблема такая: 2 компа, на одном linux, второй Win. На первом стоит Apach, php, ...короче web-server. файл index.php .... ...

Свайп - как бороться
Здравствуйте! Вводная: В локации &quot;Сумка&quot; есть предмет с кнопкой &quot;Одеть&quot;, при нажатии на кнопку статус вещи сменяется с off на on,...

Как с эти бороться?
http://realgallery.ru/ мой сайт. Сверху три текста. http://profilet.ru/rus/orgtehnika_internet_magazin.html нах мне неизвестный...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru