Thursday, December 20, 2012

Yukuan's Blog: Be Pythonic -- 字正腔圓說 Python

From Yukuan's Blog: Be Pythonic -- 字正腔圓說 Python


Be Pythonic -- 字正腔圓說 Python

學任一種語言,要說得道地,關鍵是融入語言的風格特色中,體會語言社群的風土,知道他們的慣用法。
既然 Python 寫的 code 有 executable pseudo code 的美稱,想寫出 Pythonic 的 code ,當然要站在一定的高度,讓寫出來的 code 夠 pseudo...

Pythonic 一詞被用來形容合於 Python 慣用法的 code 。Pythonic 的 code 除了讓人們更好理解外,機器執行時,也往往更具效率--語言設計者會絞盡腦汁最佳化語言慣用法的執行效率。這在 Python 這類高階、動態的語言,尤其明顯 :)
幾個 Pythonic 的準則:
  • 讓程式結構盡量扁平(flat)
  • 降低 Loops 的複雜度
    • 少用 counter ,偶爾用一下 iterator
    • 改採 Functional Programming
      • 利用 map, reduce, filter 等 functions
    • 能用 List Comprehensions 更好
  • function 是第一級物件,可以不必定義在 class 裡。
    • 如果只是要為一群公用的 function 分組,應該使用 module
    • 分類複雜時再追加使用 package
    • 需要用到多個 instance 時,才要定義 class
  • 向 getters 及 setters 說「不」
    • 以 keyword parameters 及 default parameters 取代一部分 getters/setters 的需求
    • 或者直接存取 object 的成員變數
    • 必要時,追加使用 property,而不必改到 client code
  • 以 Duck typing 取代不必要的繼承
  • 以 tuple assignment 同時 assign 多個變數
  • 以 tuple assignment 讓 function 傳回多個值
  • 以 Generator Function 達成 Continuation
  • 不要多次叫用 + 或 += 來串接字串
  • 以 eval 來 parsing 字串
  • 只被單一 function 呼叫的 functions ,考慮使用 Closure
  • ……
更詳盡的說明,請參考以下的收集及摘要:
  • Be Pythonic
    • You need counters rarely, and iterators only occasionally
    • You may not need that for loop
    • Tuples are not read-only lists
    • Classes are not for grouping utility functions
    • Say no to getters and setters
    • Functions are objects
  • Python isn't Java without the compile
    • First-class functions
    • Keyword parameters
    • Default parameters
    • Tuples
    • Parallel assignment
    • Efficient multiple return values
    • Continuations
    • User-defined operators
    • Closures
    • Meta-programming
  • Python is Not Java
    • Flat is better than nested
    • Got a switch statement? The Python translation is a hash table, not a bunch of if-then statments.
    • XML is not the answer.
    • Code is easier to write than XML.
    • Getters and setters are evil.
    • Stop Writing So much code
其他相關 links:

Sunday, December 16, 2012

同樣打自傷拳 為何星巴克贏、華碩輸? - Yahoo!奇摩新聞

同樣打自傷拳 為何星巴克贏、華碩輸? - Yahoo!奇摩新聞

Reload 

在戰場上,有一種戰略:原弱勢的競爭者,以表面上可能傷己的行動,爭取反轉契機,靠「拿到的比輸得多」,贏得戰爭;商場上,這樣的戰略也很常見,原本市占率排名居後的競爭者,推出低價產品,發動價格攻勢,務求在最短時間內反轉競爭態勢。這,就是「自蝕策略」。又是什麼情況下,才夠有資格發動「自蝕」戰略呢?

自蝕成功要件一:不能只看市占,還要獲利最大化
二○○七年十月,華碩Eee PC700小筆電推出上市,體積小,功能恰恰好,然而新台幣一萬到一萬五千元售價,僅有傳統筆電的三分之一到二分之一,僅僅二○○八年上半年,華碩Eee PC出貨量超過兩百萬台,遠超過前一年五十萬台的出貨量三倍,華碩在筆電市場的全球市占率,也由第九名提升為第五名。
看來勢頭大好的市場,卻在同年七月市場老二宏碁推出八‧九吋小筆電AspireOne之後,一夕反轉,那一年第四季EeePC因為庫存過多,華碩出現成立十九年以來首次的季虧損。
換句話說,企業在盤算是否發動自蝕策略時,心裡要想的不只是,「我自蝕本身現有產品可以贏得市占率,」還要算算, 一、價格破壞可以做到什麼程度?邊際利潤下降空間有多少?二、如果想要增加總獲利,手上必須還有什麼要件,可以一搏最終勝局。
看看另一個大家都很熟悉的品牌星巴克,在二○○九年三月,所推出的即溶咖啡品牌「VIA Ready Brew」。
自蝕成功要件二:不會影響主力商品,另添動能
即溶咖啡?還有比它更容易侵蝕星巴克既有高價品牌形象的產品嗎?消費者會不會買了星巴克即溶咖啡,就不會去星巴克的店裡消費了?
事實上,在美國每年六百五十億杯咖啡消耗量中,星巴克店裡消費的咖啡量只有四%,即溶咖啡占全部咖啡消耗量的70%,雖然星巴克的即溶咖啡,會降低顧客的來店消費量,但卻可以吸收其他96%的消費者,來購買星巴克即溶咖啡。上市之後,不到八個月時間,就搶下高價即溶咖啡30%市場,而且本業營收繼續成長,並沒有受到侵蝕,也就是說,自蝕並沒有發生,反而搶下了新市場。
講到這裡,讀者一定會說,從華碩或是星巴克的例子來看,自蝕策略是強者越強的戰略,規模不夠大、不能深度掌握市場的玩家,打自蝕價格戰根本不聰明,這答案,可以說對,也可以說不對。
1999年初,台灣行動通訊市場被三家龍頭業者占據:台灣大哥大、中華電信與遠傳共拿下90%市占率,排行市場老四的和信電訊,不僅市占率低,掌握的用戶四成以上都是低貢獻度的預付卡客戶。前三名的業者為了進一步搶占市占率,紛紛推出低於百元的低月租費方案,這個舉動壓縮了和信電訊預付卡業務再成長的空間。
自蝕成功要件三:敢出險招,讓對手不敢跟進
怎麼辦?毫無競爭資源的和信電訊出了險招,推出了針對高貢獻度客戶資費方案「哈啦900」,標榜網內互打五分鐘免費,網外一分鐘通話費率大幅下降。這個對於每個月通話量大的用戶很有價格競爭力的方案,成功讓和信從其他業者手中吸引了高貢獻度的用戶。
和信為什麼敢推?因為它的高貢獻度用戶本來就少,它知道,我從競爭者身上吸收到的,將多於我本身的損失。和信市占率只有10%,其他業者大約都是30%,規模大的業者打算盤,無論如何推出高資費方案都可能得不償失,只會產生價格戰,因此沒有動機去模仿和信的策略,做價格破壞。
自蝕策略能做,前提是你的對手無法或沒有誘因仿效。不管是自身累積的競爭優勢,或是因為市場情勢足以阻絕對手跟進。任何的策略選擇,都是精密的計算與心理戰,在棋盤上衡量對手,也衡量自己的對應能耐,只算下一手是絕對不夠的。
§

Wednesday, September 19, 2012

億萬富翁神奇公式:1.4萬×(1+20%)×40年=1.0281億 - Yahoo!奇摩新聞

Ref: 億萬富翁神奇公式:1.4萬×(1+20%)×40年=1.0281億 - Yahoo!奇摩新聞


富人何以能在一生中積累巨大的財富?闊佬們究竟擁有什麼特殊技能,是那些天天省吃儉用、日日勤奮工作的上班族所欠缺的?到底理財致富的條件何在?答案是:神奇公式!
這個「神奇公式」假定有一位年輕人,從現在起每年定期存款 1.4 萬元,享受平均 5% 的利率,如此持續 40 年,他可以積累的財富為 1.4 萬元 × (1 + 5%) × 40 = 169 萬元。
但是,如果這位年輕人將每年應存的錢全部投資到股票或房地?市場,並假定能獲得年均 20% 的投資報酬率,則 40 年後,他能積累多少財富?一般人猜測是在 200 萬元至 800 萬元。然而,「神奇公式」給出的答案是 1.0281 億元!
而這個資料,乃依照財務學計算年金的公式得到: 1.4 萬 × (1+20%) × 40 = 1.0281 億。試試將這個天文數字與前述平均投資報酬率僅為 5% 的定期存款相比,你會發現兩者收益的差距達 70 餘倍之巨,多麼令人驚訝!
香港《大公報》引述《上海金融報》報導,儘管這個「神奇公式」聽來很是懸乎一個 25 歲的上班族,若依此方式投資到 65 歲退休,就能成為億萬富翁。如此,全世界闊佬將遍地都是,一抓一大把。相信這種情景出現的概率不高,因?一般情況下,沒有多少人會將之進行到底。畢竟漫長的 40 年裏,會發生多少不可預料之事。
顯然,「神奇公式」真正的目的,是告訴人們投資理財並無什麼複雜技巧,最重要的乃是觀念。每個理財致富的人,只不過是養成了一般人不喜歡、且無法做到的習慣而已,即投資理財的能力。如此,那些令人困擾的貧富問題就有了「基本標準」的答案:一個人一生能積累多少財富,不取決於賺了多少,也非一味開源節流,而是取決於如何理財。這便是致富的關鍵。
你認為自己是一個貧窮的人嗎?如果是,你是否想過改變自己的現狀,從現在起積累自己的財富,邁向富人的行列?讀讀以下的這些理財哲學,或許會對你有所?發。
A、將生活費用變成第一資本
一個人用 100 元買了 50 雙拖鞋,拿到地攤上每雙賣 3 元,一共得到了 150 元。另一個人很窮,每個月領取 100 元生活補貼,全部用來買大米和油鹽。同樣是 100 元,前一個 100 元通過經營增值了,成為資本。後一個 100 元在價值上沒有任何改變,只不過是一筆生活費用。 (接下頁)
貧窮者的可悲就在於,他的錢很難由生活費用變成資本,更沒有資本意識和經營資本的經驗與技巧,所以,貧窮者就只能一直窮下去。
財智哲學:渴望是人生最大的動力,只有對財富充滿渴望,而且在投資過程中享受到賺錢樂趣的人,才有可能將生活費用變成「第一資本」,同時,積累資本意識與經營資本的經驗與技巧,獲得最後的成功。
B、最初幾年困難最大
其實,貧窮者要變成富人,最大的困難是最初幾年。財智學中有一則財富定律:對於白手起家的人來說,如果第一個百萬花費了 10 年時間,那麼,從 100 萬元到 1000 萬元,也許只需 5 年,再從 1000 萬元到 1 億元,只需要 3 年就足夠了。
這一財富定律告訴我們:因為你已有豐富的經驗和流動的資金,就像汽車已經跑起來,速度已經加上去,只需輕輕踩下油門,車就會疾駛如飛。開頭的 5 年可能是最艱苦的日子,接下來會越來越有樂趣,且越來越容易。
財智哲學:貧窮者不僅沒有資本,更可悲的是沒有資本意識,沒有經營資本的經驗和技巧。貧窮者的錢如不是資本,也就只能一直窮下去。
C、貧窮者的財富只有大腦
人與人之間在智力和體力上的差異並不是想象的那?大,一件事這個人能做,另外的人也能做。只是做出的效果不一樣,往往是一些細節的功夫,決定著完成的質量。
假如一個恃才傲物的職員得不到老闆的賞識,他只是簡單地把原因歸結為不會溜鬚拍馬,那就太片面了。老闆固然不喜歡不尊重自己的人,但更重要的是,他能看出你的價值。同樣,假如你第一次去辦營業執照,就和辦證的人吵得不可開交,可以肯定,你開的那個小店永遠只能是個小店,做大很難。這樣的心態,別說投資,連日常理財都難做好。
很多投資說到底是一種賭博,賭的就是將來的收益大於現在的投入。投資是件風險極大的事,錢一旦投出去就由不得自己。
貧窮者是個弱勢群體,從來沒把握過局勢,很多時候連自己也不能支配,更不要說影響別人。貧窮者投資,缺的不僅僅是錢,而是行動的勇氣、思想的智慧與財商的動機。(接下頁)
貧窮者最寶貴的資源是什麼?不是有限的那一點點存款,也不是身強力壯,而是大腦。以前總說思想是一筆寶貴的精神財富,其實在我們這個時代,思想不僅是精神財富,還可以是物質化的有形財富。一個思想可能催生一個產業,也可能讓一種經營活動?生前所未有的變化。
財智哲學:人與人之間最根本的差別不是高矮胖瘦,而是裝著經營知識、理財性格與資本思想的大腦。
D、對自身能力的投資
有一位偉人的話,大意是一個人的價值大小,不是看他向社會索取多少,而是看他貢獻多少。相比之下,按勞分配並不是按你的勞動量來分配,而是要你生產出更多的價值。只要你願意,你勞動的能力越強,創造的價值越多,就越可能獲得高的收入。多勞多得的根本是質而不是量,貧窮者最根本的投資是對自身能力的投資。
財智哲學:說到資本家,貧窮者就聯想到那些剝削工人剩餘勞動價值的人,心中自然有種抵觸。實際上,只要你願意,你也可以當資本家,資本市場是向每一個人開放的,其中也有你的那一份天地。
E、教育是最大投資
學歷只是一般教育的證明,學校裏學到的只是一些綜合性的基礎知識,人一輩子都需要重新學習。有一篇報導,江蘇省 2003 年高學歷 (本科及以上) 者人均年收入超過 11 萬元,小學文化程度者只有 3708 元,二者相差近 30 多倍。經濟收入的懸殊,已經造成實際上的高低貴賤。在當今社會,要想過上稍稍像樣一點的生活,就必須有一個高學歷。
財智哲學:教育是最大的投資,對很多貧窮者來說,他們的命運是和受教育程度密切相關的。因為貧困不是一種罪過,但貧困中的人都不得不承受它的惡果。
F、勿以運氣讓貧窮開脫
關於資本的故事每個人都聽過不少。比如某個美國老太太,買了 100 股可口可樂股票,壓了幾十年,成了千萬富翁;某位中國老太太,捂了 10 年深發展原始股,也成了超級富婆。故事的主角都是老太太,笨頭笨腦,居然一彎腰就撿了一個金娃娃。
從理論上講,美國老太和中國老太的投資都是成功的,但對更多的人而言,卻很難有什?推廣價值。兩個老太憑什麼能夠堅持捂股?不是理智的分析,也不是堅定的信心,而是什麼都不懂,要麼是壓在箱底忘在腦後了,要麼是運氣的因素。貧窮者把很多事情都歸於運氣。因為只有運氣是最好的藉口,可以為自己的貧窮開脫。「運氣不好」是所有失敗者的療傷良藥。
財智哲學:在商品經濟時代,人人都會有運氣,不勞而獲不僅是可恥的,而且是不可能的。一個人之所以有權獲得收入,是因為他讓社會生產出了產品,社會才給了他的回報。
G、知本向資本靠攏
有個故事說的是一個國王要感謝一個大臣,就讓他提一個條件。大臣說:「我的要求不高,只要在棋盤的第一個格子裏裝 1 粒米,第二個格子裏裝 2 粒,第三個格子裏裝 4 粒,第四個格子裏裝 8 粒,以此類推,直到把 64 個格子裝完。」國王一聽,暗暗發笑,要求太低了,照此辦理。不久,棋盤就裝不下了,改用麻袋,麻袋也不行了,改用小車,小車也不行了,糧倉很快告罄。數米的人累昏無數,那格子卻像個無底洞,怎?也填不滿……國王終於發現,他上當了,因為他會變成沒有一粒米的窮者。一個東西哪怕基數很小,一旦以幾何級倍數增長,最後的結果也會很驚人的。 (接下頁)
貧窮者的發展難,起步難,堅持更難。就那麼幾粒米,你自己都沒了胃口。可一件事情的成功,往往就在於最後一步。當基數積累到一定的時候,只需要跳一下格子,你就立地成佛了。這之前的一切都是鋪墊,沒有第一粒米,就沒有後面的小車大車,這個過程是漫長的,也是艱難的。但是世界上聰明的人很多,有知識的人遍地都是,但真正能發大財的卻少,要把知識變?知本,只有和資本聯姻才行。
財智哲學:富人靠資本生錢,貧窮者靠知本致富。以知本作為資本,赤手空拳打天下,可能是現代貧窮者們最後也最輝煌的夢想。但是,一個生活在底層的人,很難有俯瞰的眼光和軒昂的氣度,貧窮者內心最缺乏的其實就是這種自信。
理財是一種思想,如果你想要更多的錢,必須改變你的思路。任何一位白手起家的人總是從小做起,循序漸進,然後不斷壯大。投資也是這樣,起初的投入雖有限,但以財生財的觀念來說,它必然會成為未來獲取更大收益的基礎。很多人試圖期望儲蓄和籌集一大筆錢後,再來做一筆大生意或大投資,因為他們認?大的投入才能賺到真正的大錢,但往往事與願違。太多的不成熟的動機和思維方式最終都使他們的大量資本承擔著巨大的風險,要?生意不成,要?慘痛的損失掉其中的大部分。
那麼,不理財而僅靠自己的一身本事,就會逐漸富有起來嗎?因為很多人在面對理財、投資時,總會不成熟的認為有風險,誰又虧了,誰又血本無歸了。總是認為把錢存在銀行更把穩一點,殊不知,正因為這樣,他們失去了能逐漸成為一個富人的機緣,並且永遠也富有不了,只能成為一個辛苦賺錢的工具,而非自由自在的享受生活的人。



Monday, July 16, 2012

Web 流程圖 樹狀圖


musie:連樹狀圖都做得出來了......                                07/16 22:51
→ musie:http://thecodeplayer.com/walkthrough/css3-family-tree     07/16 22:52
→ ninetyeight:組織圖                                              07/16 23:54
→ ninetyeight:http://www.headjump.de/article/arrows-and-boxes     07/16 23:55
→ ninetyeight:樹狀圖                                              07/16 23:57
→ ninetyeight:http://ppt.cc/9C~3                  

Monday, May 7, 2012

個人理財-七成富翁甘願修鞋子


Ref: http://goo.gl/VzHZJ

商業周刊-理財-個人理財-七成富翁甘願修鞋子 而非買新鞋 (1/3)

富人消費必定一擲千金?研究顯示其實不然,許多富人反而常選擇修改衣服、換鞋跟,而不是買新衣、新鞋……。
荷蘭是全球最富有的國家之一,她卻同時以節儉聞名,不但英文的「各付各的(go dutch)」是形容荷蘭人,甚至還被其他國家編造笑話消遣,如「四個荷蘭人進咖啡廳,點的是一杯水加四根吸管。 」
其實「富而節儉」不是荷蘭的專利,而是大部分富人們的共同特色,他們從不被欲望追著跑。專門研究百萬富翁行為的美國作家史丹利(Thomas Stanley),在其著作《百萬富翁的智慧》(The Millionaire Mind),調查超過七百位資產淨值超過一百萬美元的富人,歸納後發現,這些富人其實非常節儉、懂得管理自己的欲望。
只把錢花在刀口上!事先擬定採購單,趁打折才出手
譬如,七○%的富翁會更換磨損的鞋跟,而不是買新鞋;他們雖買得起高級服飾,但他們卻不常這樣做,反而常逛二手服飾店;如果衣服尺寸不合,他們會拿去修改,而不是買新衣。
不只美國富翁才會等打折、收舊品,其他國家富人也一樣,瑞典宜家家具(IKEA)創辦人坎普拉德(Ingvar Kamprad)就是一例。
身價高達新台幣九千三百億元的坎普拉德在《富比世》(Forbes)雜誌全球富豪榜高居第七,其財產是郭台銘的五倍,但他仍戴著一副老式眼鏡、穿著舊外套。不但如此,他也懂得廢物利用。不久前,瑞典當局為他建了一座雕像,出席剪綵儀式時,他把綵帶小心的折好交給當地市長,囑咐這綵帶還可以繼續使用。而他家裡的家具,也都是從宜家的大賣場買回來的;平常買東西時,他也都趁商店打折時才去。
大部分人到商店購物,都是興之所至,看到什麼就拿什麼。史丹利的研究卻顯示,富人採購日用品都會事先擬採購單,如某富豪夫婦採購方式是:把經常光顧的商店平面圖畫出來,標出各商品的位置,若家裡哪項日用品用完了,就在圖上標出來,採購時就以這份圖當清單。此外,他們也會根據折價券與特價品來決定採購,這樣做既可省時,也不會浪費錢買一些不必要的東西。
§
偏好最省錢的活動!和家人聚會、找稅務專家學節稅
富人們的日常活動,大部分是「省錢活動」。如他們過去一個月最常做的日常活動,不是逛百貨公司血拼,而是「和家人聚在一起」。因為當你看小孩比賽時,就不可能同時去逛名牌店;當你跟小孩玩時,就不能去賭場,這就是「省錢活動」的意義。
過去十二個月,富豪閒下來時最常從事什麼活動?很多人可能會猜到國外度假,或是到賭場賭錢。事實上,富人反而很少做這些奢華活動,排名第一的活動是「請教稅務專家」︱︱八五%的富人會找稅務專家諮詢。他們每年要繳大筆稅,所以他們知道請教稅務專家的好處,即使只有節稅五%到一○%,小孩的教育費用就有著落了。
「財富不是屬於擁有它,而屬於享受它的人。」這句富蘭克林(Benjamin Franklin)的名言,提醒人們除了追求財富,也要重視健康。美國百萬富翁裡,有六四%的人經常運動。
不過,現代休閒產業不斷灌輸人們「要健康就得花錢」,所以人們得繳錢入會員、上健身中心,或是花錢練氣功、做瑜伽、打太極,運動時也要穿得越來越時髦。光是德國,每年花在健身中心的錢就有三億歐元(約合新台幣一百四十億元),相當於加勒比海島國格瑞那達(Grenada)一年的國內生產毛額。
司機與女傭,免!出門坐公車,家務事自己動手做
但運動時其實只需要新鮮空氣和活動筋骨就夠了,一雙舊球鞋、破運動衫、運動褲就可以在公園裡跑個痛快,根本不用花錢在健身房裡用跑步機。一般上班族或許沒時間跑步,但研究顯示,爬樓梯效果跟跑步一樣,不但是預防心血管疾病的良方,而且一毛錢也不用花。
§
美國流行樂壇天后瑪丹娜(Madonna),早就注意到爬樓梯的好處了。即使年收入超過新台幣十億元,每次她巡迴演唱,從不使用下榻飯店的健身設備,而是請飯店經理把樓梯間空出來,十五分鐘就夠了,讓她可以在樓梯間裡上下跑動。
所以,儘管瑪丹娜到今年八月就滿五十歲,但她還能在短短兩個月內連開二十場演唱會,體力之佳讓許多年輕人瞠乎其後。
富人出門也未必開名車,例如前面提到的宜家家具創辦人坎普拉德,平日最常坐的交通工具是公車,某次參加高級宴會,警衛還把坎普拉德擋在門外,因為他們看見他從公車下來。
至於富人們的家,一般人以為必是僕役如雲,不過史丹利研究美國富人,發現他們很少雇請女傭。另一個例子是二○○三年去世的瑞士羅氏藥廠(Roche)創辦人孫女維拉.霍夫曼(Vera Oeri-Hoffmann),她生前持有該公司半數以上股票,身價達百億瑞士法郎,但這位女富豪生活卻十分儉僕,家裡未雇請女傭,平日家務也都親自動手。
被尊為「最偉大的匈牙利人」的十九世紀瑟切尼(Szechenyi)伯爵曾說:「如果你有三百塊錢,要花錢時,你一定要當作自己只有三十塊錢。」許多富人未必聽過這句話,但他們的行為卻幾乎完全符合此一準則,原因無他,因為他們都比一般人更懂得管理自己的欲望
§
富人消費必定一擲千金?研究顯示其實不然,許多富人反而常選擇修改衣服、換鞋跟,而不是買新衣、新鞋……。
荷蘭是全球最富有的國家之一,她卻同時以節儉聞名,不但英文的「各付各的(go dutch)」是形容荷蘭人,甚至還被其他國家編造笑話消遣,如「四個荷蘭人進咖啡廳,點的是一杯水加四根吸管。 」
其實「富而節儉」不是荷蘭的專利,而是大部分富人們的共同特色,他們從不被欲望追著跑。專門研究百萬富翁行為的美國作家史丹利(Thomas Stanley),在其著作《百萬富翁的智慧》(The Millionaire Mind),調查超過七百位資產淨值超過一百萬美元的富人,歸納後發現,這些富人其實非常節儉、懂得管理自己的欲望。
只把錢花在刀口上!事先擬定採購單,趁打折才出手
譬如,七○%的富翁會更換磨損的鞋跟,而不是買新鞋;他們雖買得起高級服飾,但他們卻不常這樣做,反而常逛二手服飾店;如果衣服尺寸不合,他們會拿去修改,而不是買新衣。
不只美國富翁才會等打折、收舊品,其他國家富人也一樣,瑞典宜家家具(IKEA)創辦人坎普拉德(Ingvar Kamprad)就是一例。
身價高達新台幣九千三百億元的坎普拉德在《富比世》(Forbes)雜誌全球富豪榜高居第七,其財產是郭台銘的五倍,但他仍戴著一副老式眼鏡、穿著舊外套。不但如此,他也懂得廢物利用。不久前,瑞典當局為他建了一座雕像,出席剪綵儀式時,他把綵帶小心的折好交給當地市長,囑咐這綵帶還可以繼續使用。而他家裡的家具,也都是從宜家的大賣場買回來的;平常買東西時,他也都趁商店打折時才去。
大部分人到商店購物,都是興之所至,看到什麼就拿什麼。史丹利的研究卻顯示,富人採購日用品都會事先擬採購單,如某富豪夫婦採購方式是:把經常光顧的商店平面圖畫出來,標出各商品的位置,若家裡哪項日用品用完了,就在圖上標出來,採購時就以這份圖當清單。此外,他們也會根據折價券與特價品來決定採購,這樣做既可省時,也不會浪費錢買一些不必要的東西

Wednesday, March 21, 2012

char CString 轉換

1、char*轉換成CString
若將char*轉換成CString,除了直接賦值外,還可使用CString::Format進行。例如:

char chArray[] = "This is a test";
char * p = "This is a test";


LPSTR p = "This is a test";
或在已定義Unicode應的用程式中

TCHAR * p = _T("This is a test");


LPTSTR p = _T("This is a test");
CString theString = chArray;
theString.Format(_T("%s"), chArray);
theString = p;
2、CString轉換成char*

若將CString類轉換成char*(LPSTR)類型,常常使用下列三種方法:

方法一,使用強制轉換。例如:

CString theString( "This is a test" );
LPTSTR lpsz =(LPTSTR)(LPCTSTR)theString;
方法二,使用strcpy。例如:

CString theString( "This is a test" );
LPTSTR lpsz = new TCHAR[theString.GetLength()+1];
_tcscpy(lpsz, theString);
需要說明的是,strcpy(或可移值Unicode/MBCS的_tcscpy)的第二個參數是 const wchar_t* (Unicode)或const char* (ANSI),系統編譯器將會自動對其進行轉換。

方法三,使用CString::GetBuffer。例如:

CString s(_T("This is a test "));
LPTSTR p = s.GetBuffer();
// 在這裏添加使用p的代碼
if(p != NULL) *p = _T('\0');
s.ReleaseBuffer();
// 使用完後及時釋放,以便能使用其他的CString成員函數
3、BSTR轉換成char*

方法一,使用ConvertBSTRToString。例如:

#include
#pragma comment(lib, "comsupp.lib")
int _tmain(int argc, _TCHAR* argv[])
{
BSTR bstrText = ::SysAllocString(L"Test");
char* lpszText2 = _com_util::ConvertBSTRToString(bstrText);
SysFreeString(bstrText); // 用完釋放
delete[] lpszText2;
return 0;
}
方法二,使用_bstr_t的賦值運算符重載。例如:

_bstr_t b = bstrText;
char* lpszText2 = b;
4、char*轉換成BSTR

方法一,使用SysAllocString等API函數。例如:

BSTR bstrText = ::SysAllocString(L"Test");
BSTR bstrText = ::SysAllocStringLen(L"Test",4);
BSTR bstrText = ::SysAllocStringByteLen("Test",4);
方法二,使用COleVariant或_variant_t。例如:

//COleVariant strVar("This is a test");
_variant_t strVar("This is a test");
BSTR bstrText = strVar.bstrVal;
方法三,使用_bstr_t,這是一種最簡單的方法。例如:

BSTR bstrText = _bstr_t("This is a test");
方法四,使用CComBSTR。例如:

BSTR bstrText = CComBSTR("This is a test");


CComBSTR bstr("This is a test");
BSTR bstrText = bstr.m_str;
方法五,使用ConvertStringToBSTR。例如:

char* lpszText = "Test";
BSTR bstrText = _com_util::ConvertStringToBSTR(lpszText);
5、CString轉換成BSTR

通常是通過使用CStringT::AllocSysString來實現。例如:

CString str("This is a test");
BSTR bstrText = str.AllocSysString();

SysFreeString(bstrText); // 用完釋放
6、BSTR轉換成CString

一般可按下列方法進行:

BSTR bstrText = ::SysAllocString(L"Test");
CStringA str;
str.Empty();
str = bstrText;


CStringA str(bstrText);
7、ANSI、Unicode和寬字元之間的轉換
方法一,使用MultiByteToWideChar將ANSI字元轉換成Unicode字元,使用WideCharToMultiByte將Unicode字元轉換成ANSI字元。

方法二,使用“_T”將ANSI轉換成“一般”類型字串,使用“L”將ANSI轉換成Unicode,而在託管C++環境中還可使用S將ANSI字串轉換成String*物件。例如:

TCHAR tstr[] = _T("this is a test");
wchar_t wszStr[] = L"This is a test";
String* str = S”This is a test”;
方法三,使用ATL 7.0的轉換宏和類。ATL7.0在原有3.0基礎上完善和增加了許多字串轉換巨集以及提供相應的類,它具有如圖3所示的統一形式:

其中,第一個C表示“class”,以便於ATL 3.0宏相區別,第二個C表示常量,2表示“to”,EX表示要開闢一定大小的緩衝。SourceType和DestinationType可以是A、T、W和OLE,其含義分別是ANSI、Unicode、“一般”類型和OLE字串。例如,CA2CT就是將ANSI轉換成一般類型的字串常量。下面是一些示例代碼:

LPTSTR tstr= CA2TEX<16>("this is a test");
LPCTSTR tcstr= CA2CT("this is a test");
wchar_t wszStr[] = L"This is a test";
char* chstr = CW2A(wszStr);
結語
幾乎所有的程式都要用到字串,而Visual C++.NET由於功能強大、應用廣泛,因而字串之間的轉換更為頻繁。本文幾乎涉及到目前的所有轉換方法。當然對於.NET框架來說,還可使用Convert和Text類進行不同資料類型以及字元編碼之間的相互轉換。

Reference:

這樣的錯誤該如何解決呢?

##HIDEME##