2016-04-05 20 views
1

File.open('somefile', 'w+') numaralı telefonu alıp bir dosya okumayı, bir kerede bir metin satırını almayı ve görsel olarak başka bir dosyada yavaşça yazmayı istiyorum. Bu soruyu sormamın sebebi, bu kodu zaten yapan hiçbir şeyi bulamadığım ve bir programın bilgisayarda ne kadar hızlı yazdığının hızını gerçekten kontrol eden bir şey bulamam. Bu, bir karakterin ardından bir imleç sağladığınız ve görsel efektin çok hızlı gerçekleşmediği sürece Adobe Aftereffects gibi bir programda simüle edilebileceğini biliyorum, ancak yinelemek istediğim 4000 satır kodum var. Bunu yapmak için el ile yapamazsınız. Bu etki, bir Microsoft Makro ile de elde edilebilir, ancak bu, kopyalama ve yapıştırma seçeneği olmadan makroya manuel olarak girilmesini gerektirir. Ben düzgün anlasalardı Python, Ruby, ve PHP-Görsel olarak bir dosyaya görsel olarak yazmak için bir ifade zorlayın

+2

"Görsel olarak başka bir dosyada görsel olarak yaz" derken, simülatör (yavaş) tuş vuruşlarını mı kastediyorsunuz? Çünkü dosyayı sürekli olarak yeniden yüklemediğinizde/kaydetmediğinizde, bunu fark etmeyeceksiniz. –

+0

Evet, tuş vuruşlarını simüle ediyorum. Bir döngü düşünüyordum ve bir dosya yazmak hile yapacaktı, ancak dosya tamamen yazılana kadar dosyada görünmüyordu ve bir açıklamada zorla beklemek için bir seçenek bulamıyorum. –

cevap

0

Sonunda istediğim şeyi yapacak bir kod parçası geliştirdim. Tom Lord bana arama terimlerimde kullanmak için yeni kelimeler verdi "yazarak taklit et" ve bu SendKeys işlevi ile win32ole yol açtı. İşte bir dosyadaki tüm karakterler üzerinde yineleyecek ve yazmayı simüle ederken kaydedildikleri gibi basacak bir kod. Bunu gelecekteki kullanım için bir mücevher haline getirmeyi göreceğim.

require 'win32ole' 

wsh = WIN32OLE.new("WScript.Shell") 
wsh.Run("Notepad.exe") 
while not wsh.AppActivate("Notepad") 
    sleep 1 
end 

def fileToArray(file) 
    x = [] 
    File.foreach("#{file}") do |line| 
     x << line.split('') 
    end 
    return x.flatten! 
end 

tests = fileToArray("readfrom.txt") 

x = 0 
while x <= tests.length 
    send = tests[x] 
    wsh.SendKeys("#{send}") 
    x += 1 
    sleep 0.1 
end 
0

tercih

-solutions, size ulaşmak için çalışıyoruz ne, buyur:

input = File.read('readfrom.txt', 'r') 
File.open('writeto.txt', 'w+') do |f| 
    input.chars.each do |c| 
    f.print(c) # print 1 char 
    f.flush  # flush the stream 
    sleep 1  # sleep 
    end 
end 
0

Bu bir defa hızlı ve kirli yoludur Python'da yapıyor.

from time import sleep 

mystring= 'My short text with a newline here\nand then ensuing text' 

dt = 0.2 #0.2 seconds 
for ch in mystring: 
    with open('fn_out','w+') as f: 
     f.write(ch) 
     f.flush() 
    sleep(dt) 

f.flush() değişikliklerle dosyasını güncelleme sonuçlanacaktır.

Bu, her yeni satırdan sonra daha uzun bir duraklama veya dt değişken zaman dilimiyle daha ayrıntılı hale getirilebilir.

biri çok böyle bir şey çalıştırabilir @Tom Lord tarafından işaret önceden Terminalde izlemek üzere arka arkaya dosyasını yeniden zorundadır değişikliği izlemek için: Ben, bazı ciddi testlerden sonra

watch -n 0.1 cat fn_out 
İlgili konular