  | 
				VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.   
				 | 
			 
		 
		 
	
		| 上一篇主題 :: 下一篇主題   | 
	 
	
	
		| 發表人 | 
		內容 | 
	 
	
		王建貴
 
 
  註冊時間: 2004-03-11 文章: 62
 
  第 1 樓
  | 
		
			
				 發表於: 星期三 五月 26, 2004 12:30 pm    文章主題: 將星期幾轉換為中文顯示的問題? | 
				     | 
			 
			
				
  | 
			 
			
				各位大大.我想將星期幾顯示為中文的格式如下:
 
'星期'+substrc('一二三四五六日',dow(date(),2),1)
 
結果並不正確.不知道問題出在哪裡?請各位大大幫小弟看看.謝謝! | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		syntech
 
 
  註冊時間: 2003-05-16 文章: 4252 來自: Taipei,Taiwan
  第 2 樓
  | 
		
			
				 發表於: 星期三 五月 26, 2004 1:30 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				答案並不重要,關鍵在於思考
 
 
以 2004.05.26 測試 substrc('一二三四五六日',dow(date(),2),1) 
 
將傳回 '二',
 
SUBSTRC() 有問題的話,不是前面的字串錯,就是起始位置錯,
 
dow(date(),2) 會傳回 3,
 
改為  2004.05.26 測試 dow(date(),2) 會傳回4,
 
星期三傳回3,星期四傳回4,
 
看起來似乎是對的
 
 
改以 2004.05.26 測試 substrc('日一二三四五六',dow(date(),2),1),
 
會傳回'一'
 
所以得到一個想法,
 
substrc('一二三四五六日',dow(date(),2),1)實際上是''傳回 第3個BYTE開始的一個中文字",
 
而不是預期中"第3個"中文字
 
所以應該是
 
 
'星期'+substrc('一二三四五六日',dow(date(),2)*2,1)
 
 
如果改成 substrc('一二三四五六日',dow(date(),2)*2,2)
 
則會傳回 '三四',
 
這就表示 處理DOUBLE BYTE的動作放在這裡,
 
 
 
換一下函式  substr('一二三四五六日',dow(date(),2)*2,2)
 
得到 'T',而不是'三',
 
發現應該起始位置為'奇數'
 
所以應該是
 
 
'星期'+substr('一二三四五六日',dow(date(),2)*2-1,2)
 
 
我在寫C/C++ 程式是得到一個結論,
 
易偵錯的程式比短的程式要好,
 
所以若用 DIMENSION 作一個陣列存取,或是用DO CASE / ENDCASE,
 
其實都極不容易出錯 _________________ 如果公司有下列困擾:
 
1. 找不到便宜,快速,簡易的 生產排程軟體
 
2. 不知道如何快速排定 採購計劃
 
3. 成本抓不準,自己算比軟體算有用
 
4. 想學習系統規劃,想找系統架構的顧問
 
 
請聯絡我們,也許我們幫得上忙 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		王建貴
 
 
  註冊時間: 2004-03-11 文章: 62
 
  第 3 樓
  | 
		
			
				 發表於: 星期三 五月 26, 2004 3:25 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				小弟之前也自定了一個函數如下:
 
FUNCTION Chdow
 
     LPARAMETERS mdate
 
     store DOW(mdate,2) to num
 
     do case
 
         case num =1         &&  判斷本週第幾天
 
                 NUM = '星期一' 		      
 
         case num = 2
 
                 NUM ='星期二' 		 
 
         case num = 3
 
                NUM ='星期三' 		 
 
         case num =4
 
                 NUM = '星期四'  		 
 
         case num =5
 
                 NUM = '星期五' 		  		
 
         case num =6
 
                 NUM = '星期六' 			
 
          case num =7
 
                 NUM ='星期日' 
 
    endcase 			
 
   RETURN  NUM
 
ENDFUNC 
 
 
結果也發生一些怪現象列如NUM應傳回星期三.竟然傳回Wednesday,應傳回星期日竟然傳回Sunday.其他的都很正常.不曉得問題在哪.我是用vfp6.0難道是版本的問題ㄇ??? | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		王建貴
 
 
  註冊時間: 2004-03-11 文章: 62
 
  第 4 樓
  | 
		
			
				 發表於: 星期三 五月 26, 2004 3:43 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				謝謝syntech大哥的指導,小弟用
 
'星期'+substr('一二三四五六日',dow(date(),2)*2-1,2) 
 
已解決問體.當初也想到substr(),字元擷取位置的問題.但疏忽了中文字是兩個位元.一直在那轉來轉去.總算解決了.謝謝.還望抽空幫小弟看一下上面那個問題.到底問題在哪? | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		syntech
 
 
  註冊時間: 2003-05-16 文章: 4252 來自: Taipei,Taiwan
  第 5 樓
  | 
		
			
				 發表於: 星期三 五月 26, 2004 3:56 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				答案並不重要,關鍵在於思考
 
 
請您自己想看看哪邊有漏吧,
 
不過,VFP 是 case insensitive 的,
 
所以 num,NUM,Num,....都是一樣的,
 
變數,函式,欄位名稱通通都是一樣,
 
重複的函式名稱就可以作到那樣的結果
 
請您注意一下 _________________ 如果公司有下列困擾:
 
1. 找不到便宜,快速,簡易的 生產排程軟體
 
2. 不知道如何快速排定 採購計劃
 
3. 成本抓不準,自己算比軟體算有用
 
4. 想學習系統規劃,想找系統架構的顧問
 
 
請聯絡我們,也許我們幫得上忙 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		lygcw9603
 
 
  註冊時間: 2011-12-25 文章: 130
 
  第 6 樓
  | 
		
			
				 發表於: 星期一 三月 18, 2024 8:27 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				VFP9測試版本7423
 
 
'星期'+substrc('一二三四五六日',dow(date(),2),1)
 
改為
 
'星期'+substrc('一二三四五六日',INT(dow(date(),2)),1)
 
結果就正確了,問題出在第二個參數dow()上
 
 
如果代碼如下,結果就正常了
 
'星期'+substrc('一二三四五六日',7,1) 
 
結論:帶C的字符函數盡量不用 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
  	 
	    
  	   | 
 	
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
  | 
   
  
		 |