piątek, 27 lutego 2015
Cz4: Metody
Uff, nie rozumiem, nie rozumiem...za wcześnie się za to zabrałem. Ale z ciekawości zajrzałem
np. tutaj (szukając w google najłatwiejszego przykładu:
http://geekswithblogs.net/joycsharp/archive/2008/02/15/simple-c-delegate-sample.aspx
albo... tutaj, bajka o metodach, polecam:
http://www.codeproject.com/Articles/1629/NET-Delegates-A-C-Bedtime-Story
Cz3: Dziedziczenie
Ciekawy przyklad na blogu http://invisibleblocks.com
class A { public A() { Console.WriteLine(“in A”); } } class B : A { public B() { Console.WriteLine(“in B”); } } class C : B { public C() { Console.WriteLine(“in C”); } } new C();Pytanie, co zostanie zwrócone? Odpowiedź autora blogu invisibleblocks: “in A, in B, in C”, without me typing out : base(). C# inherits constructors automatically, and the superclass constructors run before subclass constructors.
czwartek, 26 lutego 2015
Cz2 zmagań z C# - base oraz this (w konstruktorach)...
CD mojego pamiętnika zmagań z C#. Najprostrze objaśnienia znalazłem na stronach dotnetperls:
base w konstruktorach - odwołanie do konstruktora parenta.
ChildClass Constructor called. A teraz keyword this... pozwala konstruktorom odwoływać się do konstruktorów tej samej klasy. Przykład z dotnetperls:
base w konstruktorach - odwołanie do konstruktora parenta.
public class A // To jest moja klasa bazowa (base). { public A(int value) { Console.WriteLine("Klasa base A()"); } } public class B : A // Ta klasa dziedziczy z klasy A, { public B(int value) : base(value) { // najpierw wywoływany jest konstruktor bazy. // ... następnie wykonany jest konstruktor B Console.WriteLine("Pochodna klasa B()"); } } class Program { static void Main() { // Tworzy nową instancję/wystąpienie klasy A, klasy bazowej. // ... następnie wywołuje klasę B, która wykona konstruktor bazy. A a = new A(0); B b = new B(1); }Przykład z Video Pragim Technologies:
public class ParentClass { public ParentClass() { Console.WriteLine(”ParentCass Constructor caI1ed"); ) public ParentClass(string Message) //TEN KONSTRUKTOR ZOSTANIE WYWOŁANY { Console.WriteLine(Message); ) } public class ChildClass : ParentClass ( public ChildClass() : base(”Derived class controlling Parent class”) //UWAGA "base" ( Console.WriteLine(”ChildClass Constructor called”); ) } public class Program ( public static void Mamo ( ChildClass CC = new ChildClass; } }Rezultat: Derived class controlling Parent class.
ChildClass Constructor called. A teraz keyword this... pozwala konstruktorom odwoływać się do konstruktorów tej samej klasy. Przykład z dotnetperls:
using System; class Mouse { public Mouse() : this(-1, "") { // Ten pierwszy konstruktor wywoła drugi konstruktor z parametrami (-1, ""). } public Mouse(int weight, string name) { // Constructor implementation. Console.WriteLine("Constructor weight = {0}, name = {1}", weight, name); } } class Program { static void Main() { Mouse mouse1 = new Mouse(); Mouse mouse2 = new Mouse(10, "Sam"); } } Rezultat Constructor weight = -1, name = Constructor weight = 10, name = Sam
wtorek, 24 lutego 2015
Cz1 zmagań z C#_ Ternary i Null Coalescing Operator
Postanowiłem codziennie zrobić jakiś mały kroczek, dziś zmagałem się z operatorami:
https://msdn.microsoft.com/en-us/library/ms173224.aspx
??, Null coalescing opearor http://www.dotnetperls.com/null-coalescing
Ciekawostka z Wikipedii:
"Once a non-null value is assigned to number, or it reaches the final value (which may or may not be null), the expression is completed."
?: Ternary opeartor.( conditional operator, inline if (iif), or ternary if)
np przykład tutaj. http://csharp-video-tutorials.blogspot.co.uk/2012/06/part-5-c-tutorial-common-operators.html
bool IsNumber10 = Number == 10 ? true : false;
przykład z wikipedii:
??, Null coalescing opearor http://www.dotnetperls.com/null-coalescing
Ciekawostka z Wikipedii:
return some_Value ?? some_Value2 ?? some_Value3;
"Once a non-null value is assigned to number, or it reaches the final value (which may or may not be null), the expression is completed."
?: Ternary opeartor.( conditional operator, inline if (iif), or ternary if)
np przykład tutaj. http://csharp-video-tutorials.blogspot.co.uk/2012/06/part-5-c-tutorial-common-operators.html
bool IsNumber10 = Number == 10 ? true : false;
przykład z wikipedii:
//condition ? first_expression : second_expression; static double sinc(double x) { return x != 0.0 ? Math.Sin(x)/x : 1.0; }Interesująca składnia źródło: stackoverflow
x = foo ? 1 : bar ? 2 : baz ? 3 : 4;
piątek, 13 lutego 2015
Czyszczenie danych skopiowanych do excela.
1. Czy wszystkie daty i wartości są rzeczywiście datami (czy też ciągami tekstowymi?) . Zawsze sprawdzałem to stawiając dodatkową kolumnę z formuła istext albo isnumber. Tym razem dla szybkiego sprawdzenia stosuję np. =SUMPRODUCT(--(ISTEXT(AI3:AI109))) - która zwróci info w ilu przypadkach w komórkach wystąpiły śmieci.
2. W przypadku, gdy Excel część dat potraktował jak daty a część jak łańcuchy tekstowe, cały zakres dat zaznaczam i traktuję makrem:
Czasetm zdarza się też, że dane liczbowe wklejone z innego źródła (ACE SQL, baza danych mainframe, tabelka w przeglądarce) są traktowane jak tekst i dopiero po edycji (kliknięciu i zaakceptowaniu, F2 i enter) nagle Excel przyjmuje prawidłowy format. Przecież nie będziemy klikać kilka tysięcy razy. W moim przypadku, np. w przypadku danych, które prawidłowo powinny być w formacie "Currency" działa coś takiego (jest to przeróbka kodu powyższego):
2. W przypadku, gdy Excel część dat potraktował jak daty a część jak łańcuchy tekstowe, cały zakres dat zaznaczam i traktuję makrem:
Sub PoprawDaty() For Each cell In Selection If IsDate(cell.Value) And cell.NumberFormat <> "yyyy-mm-dd" Then With cell .NumberFormat = "yyyy-mm-dd" .Value = DateValue(.Value) End With End If Next cell End SubDziała.
Czasetm zdarza się też, że dane liczbowe wklejone z innego źródła (ACE SQL, baza danych mainframe, tabelka w przeglądarce) są traktowane jak tekst i dopiero po edycji (kliknięciu i zaakceptowaniu, F2 i enter) nagle Excel przyjmuje prawidłowy format. Przecież nie będziemy klikać kilka tysięcy razy. W moim przypadku, np. w przypadku danych, które prawidłowo powinny być w formacie "Currency" działa coś takiego (jest to przeróbka kodu powyższego):
Sub PoprawWartosci() For Each cell In Selection ' If IsNumeric(cell.Value) And cell.NumberFormat <> "#,##0.00 $" Then With cell .NumberFormat = "#,##0.00 $" .Value = CCur(.Value) End With 'End If Next cell End SubA tutaj wariant, który poprawia konkretną kolumnę w konkretnej tabeli(fragment kodu):
Dim oListObj As ListObject Set oListObj = Worksheets("Oferta").ListObjects("Table3") For Each Cell In oListObj.ListColumns("wartosc").Range 'If Not IsNumeric(Cell.Value) And Cell.NumberFormat = "#,##0.00 $" Then With Cell If .Value <> "" Then .NumberFormat = "#,##0.00 $" .Value = CCur(Val(.Value)) End If End With Next CellZdarza się, że Excel nie traktuje tekstów jak teksty, wtedy na początku każdej komórki dodaję apostrof:
Sub DodajApostrofPoLewej() Dim c As Range Application.ScreenUpdating = False For Each c In Selection If Left(c, 1) <> "'" Then c.Value = "'" & c.Value Next Application.ScreenUpdating = True End SubZdarza się też, że dane skopiowane ze strony internetowej zawiarają puste komórki, a excel twierdzi, że jednak jest w nich coś (Count w pasku stanu nie równa się 0)i nie chce liczyć zakresów zawierających takie komórki. Mój trik, to wpisanie do wszystkich pustych komórek wartości 0 a następnie usunięcie wszystkich zer :
Sub clean_up() Selection.Replace What:="", Replacement:="0", LookAt:=xlWhole, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Selection.Replace What:="0", Replacement:="", LookAt:=xlWhole, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False End Sub3. Teraz pozostaje np. opracowanie wartości, które nie są liczbowe, np. w kolumnie okres w miesiącach występują liczne teksty "Okres zakończy się dnia: dd.mm.yyyy". Przydadzą się tutaj funkcje VBA Mid, Split i ostatecznie DateSerial, oto przykład:
Function ConvertLastToDate(c As String, StartDate As Date) Dim y, m, d, LastPiece As String Dim WrdArray As String Dim WordArray As Variant 'sprawdź czy termin realizacji jest wart numeryczną If IsNumeric(c) = False Then 'odetnij datę z Data zakończenia 31.12.2014 *) LastPiece = Mid(c, InStrRev(c, " ") + 1) 'podziel na kawałki oddzielone kropkami WordArray = Split(LastPiece, ".") d = WordArray(0) m = WordArray(1) y = WordArray(2) 'sklej w postaci daty excela EndDate = DateSerial(CInt(y), CInt(m), CInt(d)) 'odejmij od daty zakończenia i podaj w miesiącach ConvertLastToDate = (Year(EndDate) - Year(StartDate)) * 12 + (Month(EndDate) - Month(StartDate)) ElseIf IsNumeric(c) = True Then ConvertLastToDate = CInt(c) End If End Function* Inne kombinacje odcinania lub pobierania odciętych kawałków tekstów z komórki:
Function GetLast(c As String) GetLast = Mid(c, InStrRev(c, " ") + 1) End Function Function CutOffLast(c As String) CutOffLast = Left(c, InStrRev(c, " ") - 1) End Function Function GetFirst(c As String) GetFirst = Left(c, InStr(c, " ") - 1) End Functioncdn.
poniedziałek, 9 lutego 2015
C# underground...
Po intensywnym kursie, czas podtrzymać i rozszerzyć wiedzę:
1. Narzędzia: SharpDevelop w wersji starszej 4.3, działającej jeszcze w XP, w wersji przenośnej portableapps.com (ponoć pod linuxem będzie działać Xamarin Studio/Mono Develop). (Może też być nodepad++ i plugin https://csscriptnpp.codeplex.com/releases/view/611223)
2. Na youtube: Użytkownik kudvenkat oferuje naprawdę świetne kursy dla początkujących (serie C#, ASP.NET, Linq).
3. Android: do odtwarzania kursów w mp4 potrzebny jest pan i zoom: można uzyskać dzięki niepozornej aplikacji Picturen Lite.
Future:
?Nemerle (rozwinięcie języka C#): https://sites.google.com/site/gibekm/programming/nemerle
1. Narzędzia: SharpDevelop w wersji starszej 4.3, działającej jeszcze w XP, w wersji przenośnej portableapps.com (ponoć pod linuxem będzie działać Xamarin Studio/Mono Develop). (Może też być nodepad++ i plugin https://csscriptnpp.codeplex.com/releases/view/611223)
2. Na youtube: Użytkownik kudvenkat oferuje naprawdę świetne kursy dla początkujących (serie C#, ASP.NET, Linq).
3. Android: do odtwarzania kursów w mp4 potrzebny jest pan i zoom: można uzyskać dzięki niepozornej aplikacji Picturen Lite.
Future:
?Nemerle (rozwinięcie języka C#): https://sites.google.com/site/gibekm/programming/nemerle
Subskrybuj:
Posty (Atom)