2011-09-29 13 views
0

我已經寫了一個程序來測量我的打字速度。作爲其中的一部分,我需要它來統計我輸入的字符數。我這樣做的如何測量Ruby中長字符串的長度? SciTE和命令提示符不起作用。

text = gets.chomp 
puts text.length.to_s 

不幸的是,我不能得到這個工作的長字符串。

在SciTE編輯器中,.length不能正常工作,所以不是給我字符串的長度,而是給出了我輸入的所有內容的字符數,包括更正的錯誤 - 如果我錯字「Hrello 「並將其更正爲」你好「,它仍然會返回6而不是5.

我對此進行了搜索,建議的修復方法是從命令提示符運行程序。在命令提示符下,.length可以正常工作,但事實證明我無法輸入超過264個字符。

所以我試圖把一個GUI上的程序跟女鞋:

Shoes.app :width => 300, :height => 300 do 
    button "Start." do 
     text = ask "Type here." 
     para text.length.to_s 
    end 
end 

,發現鞋輸入框中有一個更短的字符的限制。

我運行Windows 7,紅寶石1.9.2,賽特版本2.29和鞋警察修訂1514

我怎樣才能運行這個程序,所以它會正確地測量一個很長的字符串的長度?我會很滿意任何修復命令提示符或鞋子字符限制,SciTE錯誤的解決方案,或者只是針對執行ruby程序的不同方式提出建議。

回答

2

我很樂意提供一個不同的方式來執行ruby程序,這將工作。

一個簡單的網絡應用程序呢?這裏是一個簡單的Sinatra應用程序,它可以完成你所要求的非常大的字符數限制。

require 'sinatra' 

get '/' do 
    %{<html> 
     <body> 
     <form method="post"> 
      <textarea name="typed"></textarea> 
      <input type="submit"> 
     </form> 
     </body> 
    </html> 
    } 
end 

post '/' do 
    "You typed #{params['typed'].length} characters." 
end 

運行,您可以使用作爲ruby sinatra_example.rb簡單的東西使用內置的Web服務器應用程序。或者,您可以使用多個Web服務器中的任意一個部署此應用程序。

如果你需要定時器,這應該很容易通過JavaScript完成,幷包括在表單中提交。

0

好吧,你的問題是不準確的標題,但是讓我們看看:

還有就是使用命令提示符的選項非常廣泛的號碼,你應該考慮在其上運行的紅寶石一個簡單的腳本。

在從Windows命令行中鍵入紅寶石C:/path_to_folder_program/program.rb

如果那倒執行,你可以找到紅寶石夾一些可執行的稱紅寶石外,並應,從那個命令提示符路徑,像上面那樣運行它。

但讓我問你,爲什麼是紅寶石?其他更易於訪問和用戶友好的編程語言(如JavaScript)的行爲會更好,並且會使您的程序更易於訪問。

+0

隨意編輯我的標題 - 我我不確定它究竟有什麼問題嗎?我使用Ruby是因爲它被推薦給我,因爲它是一種初學者友好的多功能編程語言,到目前爲止,它大部分都是這樣 - Javascript有一個很難學的名聲。我打算接下來解決這個問題,但我想首先了解Ruby。將嘗試您的建議,謝謝。 – Cass

0

- 編輯 -
似乎鞋子可以處理更多的字符,使用edit_box代替ask

鞋:

Shoes.app do 
    @txt = edit_box 
    button("How many"){ alert(@txt.text.size) } 
end 

無論如何,試圖鞋我之前做過我知道的練習,這裏是:

在javascript中:

<script> 
function start_stop(){ 
    var txt = document.getElementById('txt'); 
    var btn = document.getElementById('btn'); 
    if(txt.disabled){ 
     txt.value = ''; 
     txt.disabled = false; 
     btn.value = 'Stop'; 
     txt.focus(); 
     startTime = new Date().getSeconds(); 
    } else { 
     txt.disabled = true; 
     btn.value = 'Start again'; 
     timeNow = new Date().getSeconds(); 
     alert(txt.value.length + " characters in " + (timeNow - startTime) + " seconds."); 
    } 
} 
</script> 
<input type='button' id='btn' onclick='start_stop()' value='Start'> 
<textarea id='txt' rows='8' cols='80' disabled></textarea> 

在Ruby中使用Qt:(複製相同的思路在JavaScript之一)

require 'Qt' 

class MyWidget < Qt::Widget 
    slots :start_stop 
    def initialize 
     super 
     setFixedSize(400, 120) 

     @btn = Qt::PushButton.new("Start") 
     @txt = Qt::TextEdit.new ; @txt.readOnly = true 

     vbox = Qt::VBoxLayout.new 
     vbox.addWidget @btn 
     vbox.addWidget @txt 
     setLayout vbox 

     connect(@btn, SIGNAL("clicked()"), self, SLOT(:start_stop)) 
    end 
    def start_stop 
     if @txt.readOnly 
      @txt.plainText = '' 
      @txt.readOnly = false 
      @btn.text = "Stop" 
      @txt.setFocus 
      @startTime = Time.now 
     else 
      @txt.readOnly = true 
      @btn.text = "Start again (#{@txt.plainText.size} chars #{(Time.now - @startTime).to_i} in seconds)" 
     end 
    end 
end 

app = Qt::Application.new(ARGV) 
widget = MyWidget.new 
widget.show 
app.exec