ניסיתי כעת אצלנו במשרד (שרת מרוחק כמובן, מהירות תעבורה פנימית גבוהה).
עבד ממש ללא דופי.
אולי אז טעיתי ואלי זה תלוי במשהו.
פורסם במקור בפורום CODE613 ב04/08/2013 12:38 (+03:00)
ניסיתי כעת אצלנו במשרד (שרת מרוחק כמובן, מהירות תעבורה פנימית גבוהה).
עבד ממש ללא דופי.
אולי אז טעיתי ואלי זה תלוי במשהו.
פורסם במקור בפורום CODE613 ב04/08/2013 12:38 (+03:00)
אם אני זוכר טוב, זה איטי מאוד.
פורסם במקור בפורום CODE613 ב31/07/2013 17:09 (+03:00)
ב"ה האתר שלנו עובד, ומתרחב יחסית.
האתר הוקם על ידי כמה חברים פה,
לעזור להעזר וחלוק עצות וניסיון בנושאי תכנות.
האתר הוקם בין יום (או לילה) בצורה טיפה מאולתרת וזמנית: השם, הדומיין, מערכת הפורום, והעיצוב וכו'.
אז כעת נקבע השם החדש CODE613M.
מה משמעות השם?
א. אתר תכנות (code)
ב. קהילה המהלכת עם ציצית (m613), כלומר גאים בהיותם יהודים, ודבקים בהגדרה זו.
ג. נושא האתר הוא משני, תת נושא, לנושא העליון שהוא לחיות, חיים הקרויים חיים.
אפשר לתמוה, מה עניין תכנות, להשקפת חיים. מה הקשר.
זה אפי' נראה מיסיונריות לתקוע ענייני דת בענייניים טכניים מובהקים.
אנו אכן לא רוצים בכלל לערב עניינים, אבל אנו רוצים להבהיר עקרונות ומדיניות.
הקהילה/האתר פתחים בפני כל,
אך אחרי שהכרזנו בשער כל עקרונותינו, גם מי שזר להם, יוכל להשתתף תוך כדי שמירה על הערכים שלנו.
פורסם במקור בפורום CODE613 ב26/07/2013 16:10 (+03:00)
אתה לא אמור להוציא לפי מיקום.
אם זה תמיד במיקום מסויים, אז זה בהכרח גם במבנה זהה, ואתה יכול להוציא לפי מבנה. לדוגמה הפסקה החמישית.
אם זה לא כטקסט אלא כפיקסלים אתה צריך להוציא אכן לפי מיקום.
פורסם במקור בפורום CODE613 ב23/07/2014 10:55 (+03:00)
אני משתמש בitextsharp
הנה קוד בVB
Private Function ReadPdfFile(fileName As String) As String
Dim text As New StringBuilder()
If File.Exists(fileName) Then
Dim pdfReader As New PdfReader(fileName)
'For page As Integer = 1 To pdfReader.NumberOfPages
Dim strategy As parser.ITextExtractionStrategy = New parser.SimpleTextExtractionStrategy()
Dim currentText As String = parser.PdfTextExtractor.GetTextFromPage(pdfReader, 1, strategy)
currentText = New String(currentText.Reverse().ToArray)
text.Append(currentText)
'Next
pdfReader.Close()
End If
Return text.ToString()
End Function
פורסם במקור בפורום CODE613 ב26/07/2013 15:00 (+03:00)
יש אייקון בצורת יד עם אגודל. למעלה לפני התודה, ולכיוון מטה לאחר השליחה אם מתחרטים 
משמעות השם HRDM לא רלוונטית בינתיים כי השם הוא זמני.
אני אשמח לשמוע הצעות לשם יאה לפורום ולדומיין (כלומר שם פנוי).
פורסם במקור בפורום CODE613 ב25/07/2013 19:20 (+03:00)
הנה הפרוייקט המקורי כפי שפורסם:
הקוד הוא מאוד פשוט וקצר אני מקווה שתגלו בקלות מה מונע את וורד לפתוח את הקובץ לעריכה.
תבורכו מפי עליון!
הסימפטום לא מפיע אצלי. תוך כדי צפייה הקובץ נגיש לגמרי גם לכתיבה.
פורסם במקור בפורום CODE613 ב25/07/2013 17:47 (+03:00)
נכון, בקוד שלי יש טעות, צריך להוסיף אחרי המילה Document. את המילה Body.
בקשר לגודל הDLL, אכן אם זה נושא בשבילך זה בעיה שיש לתת עליה את הדעת.
(ביחס למה שזה עושה, זה קטן, אבל אתה לא צריך את כל זה לעניין קריאה גרידא).
אם אתה ממשיך עם הקוד ההוא עשה כעצתי ו"דבג" אותו צעד צעד.
פורסם במקור בפורום CODE613 ב25/07/2013 17:45 (+03:00)
הנה קוד מעודכן למה שביקשת:
Dim Doc = Packaging.WordprocessingDocument.Open(filename, False)
Dim tb As New Text.StringBuilder
For Each P In Doc.MainDocumentPart.Document.Elements(Of Wordprocessing.Paragraph)()
tb.Append(P.InnerText)
tb.Append(vbCrLf)
Next
Doc.Close()
Return tb.ToString()
פורסם במקור בפורום CODE613 ב25/07/2013 16:38 (+03:00)
נכון לא קראתי היטב את הודעתך ("רק לאחר סגירת התוכנית אפשר לפתוח"). אז טעיתי.
הבעיה היא בהחלט קובץ בשימוש. אני לא יכול להצביע על בעיה בלי שתיתן קוד. לך הייתי מציע לפתוח פרוייקט חדש וללכת שלב שלב בשימוש עם הספרייה, ולראות מה נועל את הקובץ.
מה שלא הבנת לגבי השוואת חבילות זה כבר לא רלוונטי בגלל טעותי דלעיל. בכל אופן לפי מה שהייתי סבור שהקובץ ננעל לעולמים, אפשר לפתוח את הקבצים ידנית ולחפש הבדל בין נעול לבין שאינו.
בקשר להעתקת הקובץ שפותרת ספקות, גם כבר לא רלוונטי בגלל טעותי דלעיל. התכוונתי בדיוק למה שכתבת, שאחרי העתקה מנסים עם המועתק, ואז אם יש בעיה סימן שהבעיה איננה קובץ בשימוש. תנסה יותר להבין אותי להבא...
ובקשר לספריה שהצעתי לך:
אתה מתלונן שהיא נותן טקסט מופרד בין פסקאות. אמת. ידעתי זאת.
אבל אתה סבור שזה סיבה שלא להשתמש בה? לא יכולת לשאול איך רואים מופרד לפסקאות?
תגיד מה אתה רוצה ואיך אם אתה לא מסתדר איתה. אין דבר שא"א לעשות איתה. כולל באקסל וכל תוכנות האופיס.
פורסם במקור בפורום CODE613 ב25/07/2013 16:28 (+03:00)
לדעתי הבעיה היא לא קובץ בשימוש, אלא סימון כסופי וכדומה.
אתה יכול לבדוק זאת בקלות ע"י השוואת שני ה"חבילות" (הקבצים אחרי פתיחת ZIP).
ככלל, כשיש ספק אם בעיה מסויימת היא עקב שימוש של יישום אחר, העתקה של הקובץ פותרת את הספק.
אבל, וה"אבל" הזה גדול, אני לא מבין מה ההוא מCodeproject יותר טוב מהשימוש בOpen XML.
לכן אני לא מבקש ממך להעלות את הקוד שלך, כי אני מקוה שבמקום להתעמק בשל ההוא, תשתמש עם הרשמי והמפורסם.
הנה ההורדה הרשמית: http://www.microsoft.com/en-us/download/details.aspx?id=5124
העיקר זה הקובץ הקטן, הוא הDLL. הגדול זה טוב ללמוד איך עובדים הקבצים מבוססי הOpenXml, מה הם מכילים ואיך לקרוא ולכתוב את זה.
הנה מה שצריך לקריאת הטקסט כמדומני:
Dim Doc = Packaging.WordprocessingDocument.Open(filename, False)
Return Doc.MainDocumentPart.Document.InnerText
Doc.Close()
פורסם במקור בפורום CODE613 ב25/07/2013 15:38 (+03:00)
ממש קל, בVS אתה מוסיף דף לפרוייקט WEB כל שהוא, בוחר בWebService, כותב פונקציות וזהו.
ואז התוצאה מגיעה ע"י בקשת HTTP בשיטת POST.
בתוכנה אפשר לשלב את הפונציונליות של הWebService ממש בתוכנה כמו כל DLL.
מוסיפים WebReference, וזהו יש בפרוייקט גישה לכל הפונקציות של הWebService.
פורסם במקור בפורום CODE613 ב24/07/2013 15:10 (+03:00)
אחרי שם הפרמטר כותבים = ואח"כ את הערך במידה ולא הוכנס הפרמטר הזה.
קוראים לזה Optional Parmeter חידוש של C# 4 נדמה לי.
פורסם במקור בפורום CODE613 ב22/07/2013 18:29 (+03:00)
אתה יכול לחפש בתוך התוכן של כל הקבצים במחשב עם התוכנה הזאת.
http://www.nirsoft.net/utils/search_my_files.html
תחפש את השם של הקובץ האחרון או את חלקו. ותראה האם זה מביא לך את הקובץ הרלוונטי.
בלי קשר לנושא, התוכנה ממש מוצלחת ושימושית מאוד!
תודה רבה!
פורסם במקור בפורום CODE613 ב22/07/2013 14:04 (+03:00)
לא האפליקציה מטפלת ברשימה הזו, אלא Windows 7 ומעלה ע"פ בקשתה.
(מידי דברנו במעלות WPF, אז עושים את זה שם עם שורות XAML בודדות ללא קוד, אבל אף אחד פה לא כותב תוכנות שפותחות קבצים מן הסתם...)
איפה הWindows שומר את הרשימה? אז Windows נוהג לשמור הכל ברגיסטרי, לכאורה בדיוק איפה שארכיטקט הביא.
זה שמחקת וזה הוסיף להופיע, אני סבור שזה ייעלם אחרי שתדליק את המחשב מחדש. ואם כן באמת, זה לא עוזר לך.
פורסם במקור בפורום CODE613 ב21/07/2013 13:53 (+03:00)
[u:2o9o2tow][size=150:2o9o2tow]5.MulticastDelegate, וסיום המדריך [/u:2o9o2tow][/size:2o9o2tow]
הDelegate בדוט נט הם Multicast כלומר נציג אחד יכול להכיל הפנייה להרבה מתודות.
הנה דוגמה, במקרה זה יודפס פעמיים 123.
public Example()
{
MethodContainer i = MyMethod;
i = i + MyMethod;
i();
}
void MyMethod() { Console.WriteLine("123"); }
אפשר להשתמש גם באופרטור המוכר +=, וגם ב-= להסיר מתודה כל שהיא, ממכלול המתודות. האופרטורים האלו עובדים גם כשהאובייקט ריק.
שימו לב שהדוגמה עסקה במתודת void.
במקרה של מתודה שמחזירה ערך זה חסר טעם, וזה מחזיר את הערך של הפונקציה האחרונה שהוכנסה.
טוב, סיימנו מדריך על נציגים, בע"ה מדריך הבא יהיה על אירועים.
פורסם במקור בפורום CODE613 ב05/02/2014 15:25 (+02:00)
[u:1nxlzsw8][size=150:1nxlzsw8]4. הצבה בדלגייט בצורה הצהרתית[/u:1nxlzsw8][/size:1nxlzsw8]
נחזור לדוגמה ראשונה היה שמה כזה קוד:
delegate void MethodContainer();
public Example()
{
MethodContainer i = new MethodContainer(Write123);
i();
}
public void Write123()
{
Console.WriteLine("123");
}
ההצבה נעשתה ע"י בנאי שמקבל כפרמטר שם של מתודה.
כעת שימו לב, לא צריך בכלל בנאי. למה? כי שם מתודה הוא עצמו "ליטרל".
מה זה ליטרל?? סטרינג לדוגמה יכול להופיע כפי שהוא בקוד, בלי צורך בNEW בהצבתו. איך? מוקף במרכאות כפולות. קוראים לזה ליטרל (מאחורי הקלעים נוצר אובייקט עם NEW שמכיל אותו!).
אותו הדבר Char יכול להופיע כמו שהוא מוקף במרכאה בודדת (בVB גם במרכאות כפולות שאחריהם מייד שמים את האות c). לעמות זאת בDateTime ובאלפי מחלקות אחרות, אין ליטרל. אין שום אפשרות ליצור עצם בקוד (קוד הצהרתי) בלי לעשות זאת מפורשות (קוד פונקציונלי). אגב, בVB יש כן ליטרל לתאריך ע"י תאריך בפורמט MM\DD\YYYY מוקף בסולמיות, אנשי C# תקנאואבל לעניין הנושא המדובר זה להיפך: בVB שם מתודה איננה ליטרל...
וזה אומר שכשמופיע בקוד שם מתודה, הקומפיילר מתרגם זאת לאובייקט מסוג delegate. אתם עלולים לשאול איזה delegate שהרי הצהרת delegate חייבת לכלול פרמטרים נדרשים וערך מוחזר. התשובה היא שהקומפיילר מסיק את סוג הdelegate לפי חתימת המתודה שנקבנו בשמה.
הנה המסקנות בקוד, בשלב הראשון נסיק שאפשר לכתוב ככה:
public delegate void MethodContainer();
public Example()
{
MethodContainer i = MyMethod;
i();
}
הנה, לא השתמשנו בכלל בNEW.
פורסם במקור בפורום CODE613 ב30/01/2014 14:41 (+02:00)
[u:2qcedb8a][size=150:2qcedb8a]3. דוגמה נוספת[/u:2qcedb8a][/size:2qcedb8a]
הדוגמה האחרונה הייתה על Delegate עבוד מתודה ללא פרמטרים וללא ערך מוחזר. כעת נראה דוגמה זה יש ערך מתקבל וערך מוחזר:
נניח אנחנו מפתחים פקד טקסטבוקס משוכלל עם אפשרויות מתקדמות.
אחת השכלולים שעשינו בו זה ולידציה, הפקד נניח מסמן באדום נתונים לא תקפים.
אבל מהו נתון לא תקף? אם זה ת.ז. יש נוסחה אחת, אם זה משהו אחר יש נוסחאות אחרות.
ואנחנו כמובן "משאירים את זה פתוח" למתכנת (זה ע"פ רוב אנחנו בעצמנו...) שישתמש בפקד הזה, שהוא יקבע לפי השימוש והעניין מה הנוסחה.
איך הוא יקבע?
עם דלגייט זה מאוד פשוט. במחלקה יהיה קוד דומה לזה:
//הצהרה סוג
public delegate bool ValidUserInput(string message);
//הצהרת מופע - בינתיים הוא ריק
public ValidUserInput FunctionToValidate { get; set; }
//פוקנציה שמופעלת מתי שצריל לבדוק את קלט המשתמש, אם הקלט לא תקני היא צובעת את הפקד באדום
void vaildateInput()
{
if (FunctionToValidate != null)
if (FunctionToValidate(faturedTextBox.Text) == false )
faturedTextBox.Background = Red;
}
בצד המשתמש, כלומר מי שישתמש במחלקתנו, ושוב ושוב אדגיש שזה כולל אותנו (כעובדים נכון וממדרים פרוייקטים)
אז המשתמש הזה משתמש בפקד בכל מיני מקומות לכל מיני מטרות. פעם לחשבון בנק, פעם לת.ז. וכו'.
האחריות על הפוקנציה לבדיקת התקינות בהכרח מוטלת עליו, רק הוא יודע מתי לעשות איזה אימות (מילים נרדפות: אימות, תיקוף, ולידציה).
אז נניח מקרה שהוא משתמש בפקד שלנו בשביל להציג 4 ספרות אחרונות של מס' אשראי, והנה הפונקציה שהוא הכין:
//פונקציה לאימות 4 ספרות אחרונות של כרטיס אשראי
bool Check4DigitNum(string str)
{
int ParserValue;
return int.TryParse(str, out ParserValue) && ParserValue > 0 && ParserValue < 10000;
}
הוא צריך רק להגדיר את הדלגייט של המחלקה, שיכיל את הפונקציה שלנו:
FaturedTextBox1.FunctionToValidate = new FaturedTextBox.ValidUserInput(Check4DigitNum);
פורסם במקור בפורום CODE613 ב22/01/2014 16:30 (+02:00)
[u:2eqoffeb][size=150:2eqoffeb]2. דוגמה בסיסית לנציג[/u:2eqoffeb][/size:2eqoffeb]
נניח אנו מפתחים מחלקה (למשל מחלקה שמשדרת לשב"א או כל פעולה ארוכה בסגנון).
המחלקה היא DLL דוטנטי טהור. ללא כל ייצוג גרפי.
אנו כותבי המחלקה, כותבים פרוצדורה ארוכה, שמורכבת מהרבה חלקים. מידי פעם אנו משחררים חיווי על המצב הנוכחי
(כמו: "מעבד נתונים...", "מבצע אימות...", "משדר...", "שודר בהצלחה!", "מחכה לתשובה...").
השאלה איפה להציג את החיווי הזה?
אז מאוד מתאים להשתמש בDelegate:
public delegate void StatusMessage(string message);
/// <param name="messageHandel">נציג של מתודה לטיפול בהודעות הסטטוס</param>
public void GoSendData(DataTable data, StatusMessage messageHandel)
{
//....פעולות
messageHandel("כעת אוכל דגים...");
//....פעולות
messageHandel("כל הדגים נאכלו. מתכונן למנה הבאה...");
//....
}
כעת הנה קוד בו אנחנו או מתכנת שקנה/קיבל מאיתנו את המחלקה דלעיל כDLL, משמשים בה, ומציגים את ההודעות במקום שנראה לנכון, במקרה זה אפילקציית וינדוס ואנו רוצים שההודעות יופיעו בליסט בוקס:
public UseClass()
{
var shidur = new ShidurShva();
shidur.GoSendData(dt, new ShidurShva.StatusMessage(ShowMessage));
}
public void ShowMessage(string message)
{
//שם במקרה זה את הודעת המצב בליסט בוקס
ListBoxLog.Items.Add(message);
}
[size=85:2eqoffeb][u:2eqoffeb]במאמר המוסגר:[/u:2eqoffeb]
פורסם במקור בפורום CODE613 ב19/01/2014 13:46 (+02:00)
[u:1k4ychdj][size=150:1k4ychdj]1. רקע[/u:1k4ychdj][/size:1k4ychdj]
פירוש המילה היא נציג. כלומר במקום לבוא במגע עם המתודה, יש לנו אובייקט שמייצג אותה, אפשר "לומר לו", והוא כבר יפעיל את המתודה המקורית.
נגיד יש לנו מתודה שמדפיסה על המסך "123"
אז כשאנו מציבים אותה ב"נציג" היינו הDelegate, אז יש לנו פונקציונליות ביד. אנו יכולים להכניס אותה למשתנה, למאפיין, לשלוח את זה כפרמטר לפונקציה והכל תחת הסוג ששמו Delegate.
אז הנה הדגמה לdelegate בצורתו הבסיסית, בשלוש צעדים:
א. מצהירים על הdelegate (כי כל Delegate נבדל מאחר בפרמטרים שהוא מקבל והטיפוס המוחזר).
ב. מאכלסים אותו - יוצרים מופע ממנו ובבנאי שלו שמים את שם המתודה שלנו.
ג. קוראים אליו משתמשים בו במקום במתודה המקורית
class Example
{
//הצהרה על שמו+מה הוא מחזיר+מה הוא מקבל (במקרה זה כלום).
delegate void MethodContainer();
public Example()
{
//יצירת מופע מהדלגייט. בבנאי מעבירים כפרמטר שם של מתודה, אותה הוא "ייצג".
MethodContainer i = new MethodContainer(Write123);
//שימוש בו השקול לקריאה ישירה למתודה שהוא מחזיק
i();
}
public void Write123()
{
Console.WriteLine("123");
}
}
בהודעה הבאה אדגים בע"ה שימושים בDelegate.
פורסם במקור בפורום CODE613 ב18/07/2013 14:41 (+03:00)