Posts tagged ‘C#’

NUnit mit C# 2010 verwenden

Ausgehend von einem einfachen Konsolenprogramm hier mal ein How-To für die Nutzung von NUnit unter Visual Studio 2010.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
 
namespace ConsoleApplication1
{
    class Program 
    {
        public static int add(int a, int b) {
            return a + b;
        }
 
        static void Main(string[] args)
        {
            System.Console.WriteLine(add(10,10));
            System.Console.ReadLine(); 
        }
    }
}

Zuerst installiert man die NUnit Binaries von http://www.nunit.org/?p=download. Im nächsten Schritte fügt man die Referenz zum Nunit Framework zum Projekt hinzu. Nunit.Framework sollte bei den Referenzen unter .Net auftauchen.

Dann wird die entsprechende „using Nunit.Framework“ – Direktive in den Code eingetragen. Im nächsten Schritt fügen wir die Test-Klasse FunctionTests.cs hinzu, der unsere add() Funktion prüfen soll:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
namespace NUnit.Tests
{
    [TestFixture]
    public class FunctionTests
    {
        [Test]
        public void add_test()
        {
            Assert.AreEqual(0, ConsoleApplication1.Program.add(100, 0));
        }
    }
}

Wenn das Projekt jetzt übersetzt wird können wir im Anschluss die generierte EXE in Nunit laden und den Test ausführen. In unserem Fall schlägt der Test fehl, da 100+0 nicht 0 ergeben.

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Mit C# Bilder aus einer Datenbank lesen

Heute hatte ich die Aufgabe, mal Bilder binär in eine Datenbank zu übertragen, was mit dem bulk Feature des SQL Servers auch recht gut klappt, sofern man den Dateipfad richtig angibt. Liegen die Dateien nicht auf dem Datenbank-Server, so sind UNC-Pfade zu verwenden.

-- Erstelle Tabelle
CREATE TABLE [dbo].[Bilder](
	[ID] [INT] NULL,
	[ID2] [INT] NULL,
	[DATA] [image] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
 
-- Füge Bild ein
INSERT INTO Bilder 
VALUES (1,2,(SELECT binary_data 
FROM OPENROWSET(Bulk 'c:/test.jpg', SINGLE_BLOB) 
AS F(binary_data)))

Für das Testen des Uploads habe ich dann bei http://support.microsoft.com/kb/317701 entsprechenden Code gefunden, den ich innerhalb von fünf Minuten am Laufen hatte und der auf Knopf-Druck das Bild aus der Datenbank in eine Picturebox liest. Mission accomplished 😉

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

DLLs mit C# und Powershell – III

Nachdem das Erstellen der DLL und der Test erfolgreich waren, können wir jetzt die DLL auch aus Powershell heraus aufrufen:

[Reflection.Assembly]::LoadFile("C:\simpledll.dll")
 
[de.uweziegenhagen.TextCompare]::levenshtein("Andrea", "Andria")

Die Ausgabe bringt zuerst ein paar allgemeine Informationen zur geladenen DLL, dann die Ausgabe der Funktion.

GAC    Version        Location                                                     
---    -------        --------                                                     
False  v2.0.50727     C:\Users\Uwe\Desktop\csharp-dll\simpledll\simpledll\bin\Re...
1

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

DLLs mit C# und Powershell – II

Als nächstes schreibe ich eine kleine Konsolenanwendung, mit deren Hilfe ich die DLL testen kann. Als Projekttyp nutze ich daher „Konsolenanwendung“. Im Projektmappenexplorer wird unter Verweisen ein neuer Verweis auf die DLL angelegt, dann folgt die Eingabe des Quellcodes:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using de.uweziegenhagen;
 
namespace Levenshtein_Test
{
    class Program
    {
        static void Main(string[] args)
        {
 
            Console.WriteLine(TextCompare.levenshtein("uwe", "andreas"));
            Console.ReadLine();
 
        }
    }
}

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

DLLs mit C# und Powershell – I

Hier eine kurze Anleitung, wie man mit C# eigene DLLs erstellt und diese von Powershell aus benutzt. Ich nutze die kostenlose Version von Visual Studio, Visual C# Express 2008. Als umzusetzender Algorithmus kommt Levenshtein zum Einsatz, über den ich öfter schon geschrieben habe, die Funktion stammt aus der englischen Wikipedia.

In VS lege ich ein neues Projekt vom Typ Klassenbibliothek an, als Namespace wähle ich „de.uweziegenhagen“. Das Projekt habe ich unter dem Namen „simpledll“ abgespeichert, die „Class1“ Datei in TextCompare.cs umbenannt. Hier der Quelltext für die statische Klasse, wichtig ist, dass die Levenshtein Funktion „public static“ ist, nicht „private“ wie in der Wikiedia.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace de.uweziegenhagen
{
    public static class TextCompare
    {
 
        public static Int32 levenshtein(String a, String b)
        { // http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#C.23
 
            if (string.IsNullOrEmpty(a))
            {
                if (!string.IsNullOrEmpty(b))
                {
                    return b.Length;
                }
                return 0;
            }
 
            if (string.IsNullOrEmpty(b))
            {
                if (!string.IsNullOrEmpty(a))
                {
                    return a.Length;
                }
                return 0;
            }
 
            Int32 cost;
            Int32[,] d = new int[a.Length + 1, b.Length + 1];
            Int32 min1;
            Int32 min2;
            Int32 min3;
 
            for (Int32 i = 0; i <= d.GetUpperBound(0); i += 1)
            {
                d[i, 0] = i;
            }
 
            for (Int32 i = 0; i <= d.GetUpperBound(1); i += 1)
            {
                d[0, i] = i;
            }
 
            for (Int32 i = 1; i <= d.GetUpperBound(0); i += 1)
            {
                for (Int32 j = 1; j <= d.GetUpperBound(1); j += 1)
                {
                    cost = Convert.ToInt32(!(a[i - 1] == b[j - 1]));
 
                    min1 = d[i - 1, j] + 1;
                    min2 = d[i, j - 1] + 1;
                    min3 = d[i - 1, j - 1] + cost;
                    d[i, j] = Math.Min(Math.Min(min1, min2), min3);
                }
            }
 
            return d[d.GetUpperBound(0), d.GetUpperBound(1)];
 
        }
    }
}

Das Übersetzen der DLL sollte problemlos funktionieren, die fertige DLL sollte im PRojektverzeichnis unter /bin/release liegen.

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

DLLs erstellen mit C#

Unter http://snippets.dzone.com/posts/show/3861 liegt eine kleine Anleitung, wie man mit C# DLLs erstellt und einbindet. Eine angepasste übersetzte Version des Artikels für C# Express 2008 werde ich in den nächsten Tagen mal fertigstellen.

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

WPF mit Powershell

WPF steht für „Windows Presentation Foundation“, ein Grafik-Framework von Microsoft.

Auf der folgenden Seite gibt es eine Reihe von Tutorials zu dem Thema: http://blogs.technet.com/robcost/archive/2008/05/28/powershell-wpf-cool.aspx.

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Levenshtein Distanz mit C# berechnen

Da ich momentan beruflich viel mit der Ähnlichkeit von Strings zu tun habe und ich eine handliche Lösung suchte, die ohne installiertes R auskommt, habe ich mir mit C# schnell ein entsprechendes Programm geschrieben. Die Implementierung des Levenshtein-Algorithmus gab es unter http://www.merriampark.com/ldcsharp.htm, daher musste ich nur die entsprechende Anwendung drum herum stricken. Und wenn man aus der Java-Welt kommt, ist C# echt einfach.

Levenshtein-Rechner

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Kostenlose Programmierbücher auf www.highscore.de

Auf http://www.highscore.de gibt es eine Reihe kostenloser Bücher zu verschiedenen Programmiersprachen wie C#, C++ und Java. PDF-Versionen und Lösungen der Aufgaben kosten, der eigentliche Text als HTML ist aber frei.

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website