ฟังก์ชั่นไม่ทำงานครับ
Submitted by preecha13 on 23 October, 2008 - 10:38.
tags:
ผม save ไฟล์เป็นแบบ utf8 ครับ
ถ้าเป็น ascii ธรรมดาไม่มีปัญหาอะไร
# -*- coding: utf-8 -*-
def fRigthString(str="",w=0):
xstr = str.decode("cp874") #น่าจะผิดบริเวณนี้
xResult = ""
xLenStr= len(xstr)
if xLenStr <> 0 or w <> 0:
if w > xLenStr:
w=xLenStr
i = xLenStr-1 #start copy char from rigth to left
j = 0 #count varible for loop
while j<w:
xResult = xstr[i]+xResult
i=i-1
j=j+1
return xResult
print fRigthString(u"abcefgegaทดสอบ",4)
def fRigthString(str="",w=0):
xstr = str.decode("cp874") #น่าจะผิดบริเวณนี้
xResult = ""
xLenStr= len(xstr)
if xLenStr <> 0 or w <> 0:
if w > xLenStr:
w=xLenStr
i = xLenStr-1 #start copy char from rigth to left
j = 0 #count varible for loop
while j<w:
xResult = xstr[i]+xResult
i=i-1
j=j+1
return xResult
print fRigthString(u"abcefgegaทดสอบ",4)





เคยเจออะไรคล้ายๆ ผิดตรงที่พยายาม decode นั่นแหละครับ แต่ยังหาวิธีไม่ได้
right ครับ ไม่ใช่ rigth
xstr = str.decode(“cp874”) #น่าจะผิดบริเวณนี้
ทำไมถึงต้อง decode อีกรอบล่ะครับ ในเมื่อไฟล์มันเป็น utf-8 อยู่แล้ว
ลองเปลี่ยนเป็น xstr = str ก็น่าจะใช้ได้รึเปล่าครับ
ใช่เลยครับ xstr = str หรือให้ง่ายขึ้นไปอีก
def fRigthString(xstr=”“,w=0):
เพราะ str มันเป็น builtin-type ตั้งชื่อตัวแปรแบบนี้ไม่ผิด แต่อันตราย
จากที่อ่านโค้ด ใช้ string-slicing ไม่ง่ายกว่าเหรอครับ เช่น เรียงจากขวาไปซ้าย
xstr = u”abcefgegaทดสอบ”[::-1]
จากขวาไปซ้ายจนถึงตัวที่สี่นับจากหลัง
xstr = u”abcefgegaทดสอบ”[-1:-5:-1]
จากซ้ายไปขวาเริ่มจากตัวที่สี่นับจากหลัง
xstr = u”abcefgegaทดสอบ”[-4:]
BioLawCom.De
เป้าหมายคือต้องการสร้างฟังก์ชั่น right(string,ความกว้างที่ต้องการ) เหมือนใน vb6 ครับ จะเอาไปทำเกี่ยวกับการรันรหัสต่างเช่น 00001 อะไรประมาณนี้นะครับ
งั้นประมาณนี้ก็คงได้ครับ
BioLawCom.De
ได้แล้วครับ ขอบคุณครับ
ถามเพิ่มครับ ผมสั่งแบบด้านล่างนี้แล้วมัน error แบบนี้นะครับทำไง
แต่พอไม่ใส่ ก ก็ไม่มีปัญหานะครับ
print (u’000000’+u’ก10’)[-5:] UnicodeEncodeError: ‘ascii’ codec can’t encode character u’\u0e01’ in position 2: ordinal not in range(128)
อ้อ แก้ได้แล้วครับทำโดยการ เช่น
print (u’000000’+u’จข20’)[-4:].encode(‘utf-8’)