‏הצגת רשומות עם תוויות c#. הצג את כל הרשומות
‏הצגת רשומות עם תוויות c#. הצג את כל הרשומות

יום חמישי, 8 בינואר 2015

הוספת ערכים למחלקה בלולאת Foreach

נגדיר מחלקה פשוטה:
public master()
    { }

    public int Id { get; set; }
    public string Title { get; set; }
עכשיו נניח אנחנו רוצים ליצור מופע למחלקה ולהכניס ערכים.
פשוט:
master MASTER = new master();
MASTER.Id = 1;
MASTER.Title = "blabla";

במידה וקיבלנו אובייקט אחרnew_MASTER שגם מכיל את המאפיינים ID, Title. נוכל לעשות השוואה בין המופעים, ולעדכן את הערכים.
MASTER.Id = new_MASTER.Id;
MASTER.Title = new_MASTER.Title;

כל זה מקסים, כאשר: 1. יש לי קצת ערכים 2. אני יודע מהם. אך במידה וקיבלתי שתי מחלקות גדולות לא ייתכן לכתוב:
 שורה א שווה לשורה א במופע החדש, שורה ב שווה לשורה ב במופע החדש. וגם במידה ולא ידוע לי המאפיינים של המחלקה, אז מה נכתוב? 
MASTER.??? = ?


בשביל לבצע השמה של מחלקה לתוך מחלקה נשתמש בלולאת foreach שתעבור על כל המחלקה, ותקבל כל שם מאפיין בנפרד, ותבצע השמה לתוך המאפיין בתוך המחלקה הראשית:


    Type type = MASTER.GetType();
    foreach (var item in new_MASTER.GetDynamicMemberNames())
    {
        System.Reflection.PropertyInfo prop = type.GetProperty(item); //name item
        prop.SetValue(MASTER, new_MASTER[item], null); // value item to MASTER
     }


יום רביעי, 22 באוקטובר 2014

יצירת SiteMap.xml מתוך DB


לאחר יצירת דף XML בROOT של האתר, הקוד ישאב את שמות הכתבה והתאריך יצירה שלהם מהנתונים בDB (לאחר שיוסיף להם את הכתובת של האתר והסיום aspx)

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Xml;

/// <summary>
/// Summary description for siteMap
/// </summary>
public class siteMap
{
       public siteMap() {}

    public class nodeXmlSiteMap{
        private string _loc = "http://www.mysite.co.il/";
        public string loc { get { return _loc; } set { value = value + ".aspx"; _loc = value; } }
        private string _priority = "1.0";
        public string priority { get {return _priority; } set {_priority = value; } }
        private string _changefreq = "Monthly";
        public string changefreq { get { return _changefreq; } set { _changefreq = value; } }
        private string _lastmod = String.Format("{0:yyyy-MM-dd}", DateTime.Now);
        public string lastmod {get {return _lastmod;} set { _lastmod = value; }
        }
    }

    public void createFileSiteMap() {

        XmlTextWriter writer = new XmlTextWriter(HttpRuntime.AppDomainAppPath + "sitemap.xml", System.Text.Encoding.UTF8);
            writer.WriteStartDocument(true);
            writer.Formatting = Formatting.Indented;
            writer.Indentation = 4;
            writer.WriteStartElement("urlset", "http://www.sitemaps.org/schemas/sitemap/0.9 ");

            writer = getDataFromDB(writer);
            writer.WriteEndElement();
            writer.WriteEndDocument();
            writer.Close();
        }

    private XmlTextWriter getDataFromDB(XmlTextWriter writer)
    {
       
        SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["Con"].ConnectionString);
        SqlCommand cmd;
       
        try
        {
             cmd = new SqlCommand("SELECT UrlArticle,DateArticle FROM Article");
             cmd.Connection = con;
             cmd.CommandType = System.Data.CommandType.Text;
          
             con.Open();
             SqlDataReader dr = cmd.ExecuteReader();

                while (dr.Read())
                {
                    nodeXmlSiteMap url = new nodeXmlSiteMap();
                    url.loc = url.loc + dr[0].ToString();
                   // url.priority ="1.0";
                   //url.changefreq = "Monthly";
                    DateTime _myDate = new DateTime();
                        _myDate = (DateTime)dr[1];
                        url.lastmod = String.Format("{0:yyyy-MM-dd}", _myDate);
                    createNode(url, writer);
                }
            con.Close();

        }
        catch (Exception ex)
        {

        }
        return writer;
    }

    private void createNode(nodeXmlSiteMap url, XmlTextWriter writer)
    {
        writer.WriteStartElement("url");
            writer.WriteStartElement("loc");
            writer.WriteString(url.loc);
            writer.WriteEndElement();
            writer.WriteStartElement("lastmod");
            writer.WriteString(url.lastmod);
            writer.WriteEndElement();
            writer.WriteStartElement("changefreq");
            writer.WriteString(url.changefreq);
            writer.WriteEndElement();
            writer.WriteStartElement("priority");
            writer.WriteString(url.priority);
            writer.WriteEndElement();
        writer.WriteEndElement();
    }          

}

יום רביעי, 14 באוגוסט 2013

“unrecognized escape sequence” בביטוי regex

רציתי להסיר את כל התווים המיוחדים במחרוזת, ולהשאיר את הרווחים, לכך השתמשתי בביטוי הרגולרי:
 
[^\w\d+ ]
שמשמעותו: ^ - לשלילה
w\ - כולל כל האותיות (word), גם העבריות
d\ - כולל כל הספרות (digit)
+ - הוספה של תו
 " " - ריווח

למעשה, הוא תופס את כל התווים המיוחדים, למעט רווח, שהוא משאיר.

בפועל, הקוד
string regExp = @"[^\w\d+ ]";
onlyText = Regex.Replace(onlyText,regExp, "");

למה הוספתי @?
כי זו השגיאה שקיבלתי בלעדיו  unrecognized escape sequence (רצף לא מזוהה).

נ.ב. בודק regex מעולה, הרבה אפשרויות, כולל מילון עם רצפים מוכנים

יום ראשון, 21 ביולי 2013

הפיכת מסמכי PDF לתמונה

פוסט זה נכתב לאחר שיטוט מסיבי באינטרנט למציאת פתרון, קודם אני אסביר את הבעיה:
ספריות רבות יוצרות מסמכי PDF, הבעייה שכדי שמסמך PDF יהיה תמונה הוא צריך להתרנדר כולו - וזה דבר שאין ספרייה שמטפלת בו. ספריות מפורסמות כמו iText או PDFsharp אינן יכולות לעשות זאת.
למרות ש PDFsharp מציעה את האפשרות הנחמדה לייצא מתוך הקובץ PDF תמונות.

ישנן ספריות חינמיות שטוענות שהן יכולות, אבל אני לא הצלחתי לעשות איתן כלום, כדו' 
 PDFClown, PdfRenderer. בנוסף התיעוד שלהם איננו מפותח מדי, וצריך לחפש פרוייקטים שמפורסמים באינטרנט כדי להבין כיצד לעבוד איתן.

ישנן ספריות שעולות מאות דולרים שמציעות פתרון, כמו soliddocuments
כמובן שלא בדקתי אותם.

וישנו פתרון נוסף, ברמת השרת. הספרייה GHOSTSCRIPT עושה זאת בצורה יפה.
נייבא לפרוייקט את הספרייה, מופיע בNuGet , ונעשה בקוד עצמו הפניה לספרייה עצמה gsdll32.dll
גם בספרייה זו ישנם מספר מוטציות של אותו קוד,שכולם מסמתמכות על אותו כותב.
הקוד שלי הצליח נמצא כאן או דוגמא נוספת כאן

 

יום שלישי, 12 במרץ 2013

המרת עברית לתווי ASCII ב#C

את הערכים המספריים של אותיות העבריות בטבלת ASCII תוכל למצוא כאן

הרעיון "המבצעי" היה להוסיף כגיבוי למחרוזת של עברית גם את תווי הASCII. הקוד קוצר מפרויקט שנועד לכתוב אותיות בעברית לתוך קובץ, אני קיצרתי את הפונקציה לקבלת מחרוזת והוצאת מחרוזת עם תווי הASCII:


public string convertStrToAscii(string strConvert)
    {
System.Collections.Generic.List<byte> encoded = new System.Collections.Generic.List<byte>();
        int value;
        foreach (char ch in strConvert)
        {
            value = Convert.ToInt32(ch);
            if (value >= 1488 && value <= 1488 + 27)
                value -= 1360;
            encoded.Add(Convert.ToByte(value));
        }

        string strEncoded = string.Join(",", encoded.ToArray());
        return (strEncoded + "_" + strConvert);
    }