Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: Tìm và thay thế emoticon với hình smiley tương ứng trong đoạn chat

  1. #1
    Ngày gia nhập
    07 2007
    Nơi ở
    TP.HCM
    Bài viết
    199

    Mặc định Tìm và thay thế emoticon với hình smiley tương ứng trong đoạn chat

    Mình có một danh sách các đoạn chat (string[] messages) và yêu cầu phải thay thế các ký hiệu emoticon trong đoạn chat đó thành dạng hình ảnh smiley, sau đó xuất ra dạng file html.

    File định nghĩa các emticon và tên file ảnh tương ứng có dạng như sau:

    Code:
    [imagename] tab [emoticon1] space [emoticon2] space [emoticon2]
    
    smile.gif    :) :-) :=) (smile)
    sadsmile.gif :( :-( :=( (sad)
    laugh.gif    :D :-D (laugh)
    ...
    VD như 1 câu message như sau:
    Code:
    I'm happy :).
    thì sau khi xử lý nó sẽ thành
    Code:
    I'm happy <img src="smile.gif">.
    Mình đắn đo ko biết tổ chức dữ liệu và dùng thuật toán thế nào để thay thế chuỗi.
    Thông thường thì làm 1 cách bình dân như sau:
    Lưu emoticon và filename của smiley tuơng ứng vào mảng

    Code:
    string[] emoticons, smiley;
    emoticons[0] = ":); smiley[0] = "smile.gif";
    emoticons[1] = ":-); smiley[1] = "smile.gif";
    emoticons[2] = ":(; smiley[2] = "sad.gif";
    ...
    tìm và thay thế bằng cách duyệt qua tất cả emoticon có trong mảng rồi replace

    Code:
    foreach (string m in messages)
    {
        for (int  i = 0; i < emoticons.count; ++i)
        {
          m = m.replace(emoticons[i], smiley[i]);
        }
    }
    Nhưng thấy như vậy hơi lâu và có nhiều vấn đề phát sinh nữa, vd như ký hiệu : )) có thẻ bị thay bằng <img src="smile.gif") thay vì là <img src="laugh.gif" bởi ký tự : ) sẽ dc thay thế trc : ))


    cuối cùng xuất kết quả string[] resultMessage thành file html

    Code:
    StreamWriter sw = new StreamWriter("result.html")
    foreach (string m in resultMessage )
    {
        sw.WriteLine("<p>" + HttpUtility.Encode(m) + "</p>")
    }
    vì xuât 1 chuỗi ra dạng html thì điêu kiện tiên quyết là phải encode html chuỗi đó. Nhưng phát sinh 1 vấn đề nữa là, trong chuỗi đó có chứa tag <img>, nên nếu encode như vậy thì nó sẽ encode luôn cả tag <img>, lúc hiển thị trên browser sẽ là nguyên văn chuỗi tag "<img scr="smile.gif"> thay vì là hình ảnh smile.gif

    Các bạn giúp mình giải quyết vấn đề này với.

  2. #2
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    1. Sao bạn ko quy định khi người dùng gõ kí hiệu thì thay luôn, ví dụ lúc người dùng gõ :_)) thì thay liền bằng mặt cười. Tức bạn chỉ cần kiểm tra từ cuối cùng thôi.

    2. Theo cách của bạn, tức là mọi kí hiệu luôn bắt đầu bằng ":" vậy hãy find theo : và replace theo từ.

    3. Khó quá thì làm replace của string,cái này nhanh mà. ko cần phải suy nghĩ nhiều đâu. với lại xử lí client, mấy thứ này tốn bao nhiêu đâu ?

  3. #3
    Ngày gia nhập
    07 2007
    Nơi ở
    TP.HCM
    Bài viết
    199

    Trích dẫn Nguyên bản được gửi bởi kidkid Xem bài viết
    1. Sao bạn ko quy định khi người dùng gõ kí hiệu thì thay luôn, ví dụ lúc người dùng gõ :_)) thì thay liền bằng mặt cười. Tức bạn chỉ cần kiểm tra từ cuối cùng thôi.

    2. Theo cách của bạn, tức là mọi kí hiệu luôn bắt đầu bằng ":" vậy hãy find theo : và replace theo từ.

    3. Khó quá thì làm replace của string,cái này nhanh mà. ko cần phải suy nghĩ nhiều đâu. với lại xử lí client, mấy thứ này tốn bao nhiêu đâu ?
    À đây là dữ liệu chat có sẵn chứ ko phải mình làm 1 chương trình chat, dữ liệu có thể là history của các đoạn chat dc lưu trữ, sau này load ra để xem lại...

    Hơn nữa ko có 1 chương trình instant messenger nào mà lại replace ngay lúc người ta gõ hết. Vd bạn muốn gõ : )) thay vì thì sao, nó sẽ canh khi lúc bạn gõ dấu ) đầu tiên là thay thế rồi.

    Các ký hiệu chat thì giống như yahoo đó, đau phải cái nào cũng bắt đầu bằng dấu :, chả lẽ mình phải liệt kê hết cả mấy chục ký hiêu ra cho bạn xem sao

    Dùng replace string như mình thì nảy sinh các vấn đề như mình đã nói đó...

  4. #4
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Bạn replace theo word tức khi người dùng nhấn backspace rồi mới replace cái kí hiệu đó.

    Còn replace của bạn có thể change, dùng String Builder & for character theo ":"

    m = m.replace sẽ lặp lại số lần lặp trong String.
    bạn change nó thành thế này:

    StringBuilder str = "";
    for( int i = 0; i < str.lengh; ++i){
    if( str[i] == ':')
    {
    //....
    }


    Nói chung cách của bạn cũng ok chứ ko sao cả, chạy client thì chừng đó có là gì .

Các đề tài tương tự

  1. Kỹ thuật C Làm sao để thay thế 1 đoạn lệnh trong c
    Gửi bởi 672252 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 06-06-2013, 10:13 AM
  2. Socket trong phần mềm chat video, làm thế nào để tín hiệu nhận được nhanh nhất.
    Gửi bởi toctai trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 13-06-2012, 09:19 AM
  3. Socket Làm thế nào để có thể chat với nhau giữa 2 PC thông qua IP bất kỳ nhỉ..???
    Gửi bởi cchangkhongayngo trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 6
    Bài viết cuối: 27-02-2012, 05:07 AM
  4. Trả lời: 3
    Bài viết cuối: 08-08-2011, 02:26 PM
  5. Chat ngay cùng Sư Phụ Chat trên điện thoại NOKIA của bạn
    Gửi bởi thangbsb trong diễn đàn Giải trí - Thư giãn
    Trả lời: 0
    Bài viết cuối: 20-01-2011, 09:53 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn