Laden...
U
unclesam myCSharp.de - Member
Anwendungsentwickler Nassau Dabei seit 26.03.2007 237 Beiträge
Benutzerbeschreibung

Forenbeiträge von unclesam Ingesamt 237 Beiträge

20.08.2008 - 16:58 Uhr

void Mausbewegt(int mausbewegung){
float modifier = 0.01f;
this.verschiebung += modifier * mausbewegung;
}


so ähnlich mach ich das in DirectX.

20.08.2008 - 16:55 Uhr

ich sehe den unterschied nur bei intellisense.

würde ich einfach drauflos schreiben, bekomme ich ne liste mit allen klassen, namespaces und was weiß ich noch.

wenn ich "this." schreibe, habe ich die member meiner klasse in der auflistung.
wäre aber nur ein kleiner vorteil. soweit ich das gehört habe, schreibt der compiler "this" automatisch vor klassenmembern.

20.08.2008 - 16:48 Uhr

werden vielleicht erst alle daten angezeigt und dann nur die speziellen spalten?
könnte sein, dass das datagridview die alten spalten behält. vielleicht vorher mal alle spalten im DGV löschen und vom dataadapter neu hinzufügen lassen.

20.08.2008 - 15:45 Uhr

man kann doch auf eine datatable ein select ausführen. da bekommt man dann datarow[] zurück. die rows dann in ein neues datatable packen und das per writeXML speichern.

19.08.2008 - 14:38 Uhr

Das Schema wird eigentlich by default aus dem Select autogeneriert. Da gibt es nicht das Problem.

nein, nur die namen der spalten. aber was ist mit default-werten, begrenzungen (zB nur 10zeichen für ein textfeld) und auto-increment? das wird nicht per default geladen.

ist es nicht schöner, wenn die datatable bereits fehler meldet und nicht erst die datenbank beim update? das geht nur übers schema.

19.08.2008 - 13:49 Uhr

außerdem musst du dem datatable ein schema hinzufügen. am besten das aus der datenbank. sonst geht das mit den insert schon mal garnicht. um update auszuführen, müssen sich auch daten ändern.

um das alles bewerkstelligen zu können solltest du unbedingt die drei kapitel aus dem openbook durchlesen (siehe vorherigen post von mir). da steht alles drin was du brauchst.

19.08.2008 - 12:18 Uhr

oder lies dir im <openbook> von Galileo Computing die Kapitel 27, 28 und 29 durch. Dann kannst du den Fehler auch selbst lösen.
<openbook>

20.07.2008 - 01:00 Uhr

Danke für die Antwort.
Hat sich alles gut angehört, aber hat nicht funktioniert. Ich denke ich verstehe nicht ganz was du mir sagen willst.

Warum sollte ich die Viewmatrix auf 0,0,Flieger.länger/2 setzen vor dem Rendern? Ich kann mir nicht vorstellen, dass das Auswirkungen auf meinen Flieger hat.
Habe es trotzdem gemacht und wie erwartet keine Änderung festgestellt. Egal was ich dort als Viewmatrix eintrage, es hat keine Auswirkungen.

Meine Viewmatrix nach dem Rendern habe ich hoffentlich so erstellt wie du das erklärt hast.

GFX.View = Matrix.Translation(-Player.Position) * Matrix.RotationYawPitchRoll(-Player.PlaneReference.RotationForCam.X, -Player.PlaneReference.RotationForCam.Y, Player.PlaneReference.RotationForCam.Z);

RotationFormCam (ist das Selbe wie Rotation in meinem ersten Beitrag) ist ein Vector3. Dessen Parameter ich entsprechend der Mausbewegung ändere.

Das Ergebnis war, dass ich mit der Kamera immer an einer festen Stelle in meiner Welt war - rotieren hat funktioniert.

15.07.2008 - 01:58 Uhr

Hallo,

bin gerade dabei einen Flugsimulator zu entwickeln. Ich fliege also durch meine 3D-Welt. Hierfür möchte ich mit der Kamera hinter meinem Flieger sein. Ich habe schon in einem Tutorial gelesen, dass man hierfür mit dem Flieger im Ursprung des Koordinatensystems bleibt und die Worldmatrizen so anpasst, sodass der Eindruck des fliegens entsteht. Möchte aber lieber mit allen beweglichen Elementen durch die Gegend fliefen. Daher muss ich, in Abhängigkeit zum Flieger, die Kameraposition setzen.

Genau hier fangen die Probleme an.
Ich versuche aus den Werten meiner Worldmatrix die Vektoren für die Kamera auszulesen. Dies funktioniert fast 🙂 Die Position wird richtig bestimmt, allerdings wird das Ziel für die Kamera total falsch gesetzt. Das Flugzeug bewegt sich wie gedacht, allerdings scheint es so als würde das Kameratarget in die entgegengesetzte Richtung zur Mausbewegung bewegt werden. Das ist schwer zu beschreiben. Auf jeden Fall kann man so nicht fliegen 😁

Ich zeige euch dann mal ein paar Codeschnipsel mit Erklärungen:

Hier errechne ich die Worldmatrix. Diese Methode wird momentan noch bei jedem Renderdurchgang aufgerufen.

        private void CalculateWorldMatrix()
        {
            //Rotation: Wird aus einem Vector errechnet
            Matrix WorldMatrix = Matrix.RotationYawPitchRoll(Rotation.X, Rotation.Y, Rotation.Z);

            //Scaling: Jeder Wert der Matrix wird "gescaled"
            WorldMatrix.M11 *= Scaling;
            WorldMatrix.M12 *= Scaling;
            WorldMatrix.M13 *= Scaling;
            WorldMatrix.M21 *= Scaling;
            WorldMatrix.M22 *= Scaling;
            WorldMatrix.M23 *= Scaling;
            WorldMatrix.M31 *= Scaling;
            WorldMatrix.M32 *= Scaling;
            WorldMatrix.M33 *= Scaling;

            //Position: Aus einem Vektor die Position schreiben.
            WorldMatrix.M41 = Position.X;
            WorldMatrix.M42 = Position.Y;
            WorldMatrix.M43 = Position.Z;

            //Die World-Variable ist die Worldmatrix für das zu renderde Mesh
            World = WorldMatrix;
        }

Mit diesen Attributen lass ich mir die X,Y oder die Z-Achse der Worldmatrix vom Mesh ausgeben. Dies benötige ich zum Beispiel um die richtige Bewegungsrichtung herauszufinden. Funktioniert damit auch tadellos.


        public Vector3 WorldXAxis
        {
            get
            {
                return new Vector3
                (
                    World.M11,
                    World.M21,
                    World.M31
                );
            }
        }

        public Vector3 WorldYAxis
        {
            get
            {
                return new Vector3
                (
                    World.M12,
                    World.M22,
                    World.M32
                );
            }
        }

        public Vector3 WorldZAxis
        {
            get
            {
                return new Vector3
                (
                    World.M13,
                    World.M23,
                    World.M33
                );
            }
        }

Nun zum Code, wo ich die Kameramatrix (Viewmatrix) setze.
Die Z-Achse ist die Flugrichtung für mein Flugzeug. Daher gehe ich von der Position hinter das Flugzeug mit Hilfe der Z-Achse und das Target vor das Flugzeug. Die Y-Achse zeigt vom Flugzeug aus in den "Himmel", entspricht also dem Up-Vector für die Kamera. Player.PlaneReference ist eine Referenz an das Flugzeug an welches ich mich dransetzen will.


                    Vector3 achse = Player.PlaneReference.WorldZAxis;
                    Target = Player.PlaneReference.Position - (2f * achse);
                    Position = Player.PlaneReference.Position + (2f * achse);
                    GFX.View = Matrix.LookAtLH(Position, Target, Player.PlaneReference.WorldYAxis);
                    break;

Ich hoffe jemand kann mir dabei helfen indem mir jemand einen Denkfehler oder einen besseren Lösungsweg (kein Code natürlich) zeigt.

Hoffe ich hab nix vergessen, ansonsten schreien 😉

23.05.2008 - 12:12 Uhr

In der Form kommst du über diese Anweisung an deine Panels.


this.Controls["Controlname"]

23.05.2008 - 12:08 Uhr

falls du doch comboboxen hinzufügen willst


dataGridView1.Columns[0] = new DataGridViewComboBoxColumn();

Mehr Informationen

22.05.2008 - 13:22 Uhr

Daran hatte ich auch schon gedacht und das auch schon probiert. Allerdings war das nicht das Problem.

Das Problem war VisualStudio. Beim letzten Starten des Projekts hat alles einwandfrei funktioniert.

21.05.2008 - 19:59 Uhr

bin zuhause und kann jetzt mal die Klasse posten

using System;
using System.Collections.Generic;
using System.Text;
using ITS.DBConnector;
using System.Collections.Specialized;


namespace Tagebuch.classes
{
    /// <summary>
    /// Ein Stundenplan
    /// </summary>
    class Stundenplan
    {
        #region VARIABLES
        string i_Raum, i_Klasse, i_Fach;
        int i_Unterrichtsstunde;
        //Stundenplanänderung i_Stundenplanänderung = null;
        #endregion

        #region CONSTRUCTORS
        /// <summary>
        /// Initialisiert eine neue Instanz der Stundenplan Klasse.
        /// </summary>
        /// <param name="e_Raum">Der Raum</param>
        /// <param name="e_Klasse">Die Klasse</param>
        /// <param name="e_Fach">Das Fach</param>
        /// <param name="e_Unterrichtsstunde">Die Unterrichtsstunde</param>
        public Stundenplan(string e_Raum, string e_Klasse, string e_Fach, int e_Unterrichtsstunde)
        {
            i_Raum = e_Raum;
            i_Klasse = e_Klasse;
            i_Fach = e_Fach;
            i_Unterrichtsstunde = e_Unterrichtsstunde;
            //i_Stundenplanänderung = new Stundenplanänderung(DateTime.Now, 1, e_Unterrichtsstunde);
        }

        public Stundenplan(int e_Unterrichtsstunde)
        {

        }
        #endregion

        #region DESTRUCTOR
        ~Stundenplan()
        {

        }
        #endregion

        #region METHODS
        /// <summary>
        /// Gibt den Stundenplan des Lehrers zurück.
        /// </summary>
        /// <param name="e_LehrerID">Die ID des Lehrers</param>
        /// <returns>Ein Array mit den Stunden</returns>
        public static Stundenplan[] StundenplanFromDB(int e_LehrerID)
        {
            DateTime dt = DateTime.Now;
            DBConnector db = new DBConnector("localhost", "tagebuch", "root", "");
            int dayofweek = 99;
            switch (DateTime.Now.DayOfWeek)
            {
                case DayOfWeek.Monday:
                    dayofweek = 0;
                    break;
                case DayOfWeek.Tuesday:
                    dayofweek = 1;
                    break;
                case DayOfWeek.Wednesday:
                    dayofweek = 2;
                    break;
                case DayOfWeek.Thursday:
                    dayofweek = 3;
                    break;
                case DayOfWeek.Friday:
                    dayofweek = 4;
                    break;
                case DayOfWeek.Saturday:
                    dayofweek = 5;
                    break;
                case DayOfWeek.Sunday:
                    dayofweek = 6;
                    break;
            }
            HybridDictionary[] dic_Stundenplan = db.exec_SELECTquery("stundenplan.Raum_id, stundenplan.Klasse_klasse_id, stundenplan.Fach_fach_id, stundenplan.Unterrichtsstunde_id", "stundenplan,blockplan", "stundenplan.tag = 0 AND stundenplan.Lehrer_lehrer_id = " + e_LehrerID + " AND blockplan.Wochenbezeichnung_id = stundenplan.Wochenbezeichnung_id AND blockplan.datum = '2008-1-21'", "Unterrichtsstunde_id", "");
            Stundenplan[] returnValues = new Stundenplan[dic_Stundenplan.Length];

            for (int i = 0; i != dic_Stundenplan.Length; i++)
            {
                string raum = ((int)dic_Stundenplan[i]["Raum_id"]).ToString();
                string klasse = ((int)dic_Stundenplan[i]["Klasse_klasse_id"]).ToString();
                string fach = ((int)dic_Stundenplan[i]["Fach_fach_id"]).ToString();
                int stunde = (int)dic_Stundenplan[i]["Unterrichtsstunde_id"];
                returnValues[i] = new Stundenplan(stunde);
            }

            return returnValues;
        }
        #endregion

        #region ATTRIBUTES
        /// <summary>
        /// Gibt den Raum zurück, wo der Unterricht statt findet.
        /// </summary>
        /// <value>Der Raum</value>
        public string Raum
        {
            get
            {
                return i_Raum;
            }
        }

        /// <summary>
        /// Gibt die Klasse zurück, die den Unterricht hat.
        /// </summary>
        /// <value>Die Klasse</value>
        public string Klasse
        {
            get
            {
                return i_Klasse;
            }
        }

        /// <summary>
        /// Gibt das Fach zurück, das statt findet.
        /// </summary>
        /// <value>Das Fach</value>
        public string Fach
        {
            get
            {
                return i_Fach;
            }
        }

        /// <summary>
        /// Gibt die Unterrichtsstunde zurück.
        /// </summary>
        /// <value>Die Unterrichtstunde</value>
        public int Unterrichtsstunde
        {
            get
            {
                return i_Unterrichtsstunde;
            }
        }

        /// <summary>
        /// Gibt die Stundenplanänderung zurück.
        /// </summary>
        /// <value>Die Stundenplanänderung</value>
        //public Stundenplanänderung Änderung
        //{
        //    get
        //    {
        //        return i_Stundenplanänderung;
        //    }
        //}
        #endregion
    }
}

21.05.2008 - 13:09 Uhr

Dieser Thread ist als Artikel zu verstehen und beinhaltet keine Fragen zum Thema Regions.

**
Regions,
eine Hilfe, Code übersichtlich zu halten**

Code kann schnell unübersichtlich werden. Mal fügt man hier in einer Klasse eine Methode ein, dort ein paar Variablen.
Lediglich IntelliSense behält den Überblick.
Um diesem Missstand Abhilfe zu verschaffen, kann man "Regions" verwenden. Solche Regions
können als Codeblöcke verstanden werden. Das auf- und zuklappen von Regions ist bereits von Methoden und anderen Codeblöcken bekannt.
Regions kann man aber nach Belieben benennen.
Ein kleines Beispiel zur Erstellung von Regions.

#region Regionname
public void MeineMethode(){ }
#endregion

Durch "#region" wird eine Region angefangen. Der Name dahinter wird angezeigt, wenn der Block zusammengeklappt wird.
Nun folgt der gewünschte Code. Hier muss man sich nicht auf eine Zeile wie im Beispiel beschränken, sondern kann dort beliebig viel Code "verstecken".
Am Ende folgt dann noch "#endregion" um die Region zu schließen.

Ich benutze Regions, um Variablen, Konstruktoren, Destruktor, Methoden und Attribute in jeweils einer Region zu organisieren.
Um nicht jedes mal aufs Neue bei einer Klasse die Regions zu tippen, kann man die Klassentemplates anpassen, sodass automatisch nach eigenen Einstellungen die Regions erstellt werden.
Für die Erstellung von Klassen über die Projektmappe, muss man folgende Datei ändern:

{root}:{Installationspfad}\Microsoft Visual Studio 8\Common7\IDE\ItemTemplatesCache\CSharp\1031\Class.zip\Class.cs


using System;
using System.Collections.Generic;
using System.Text;

namespace $rootnamespace$
{
	class $safeitemrootname$
	{
	#region Variablen
	#endregion
	
	#region Konstruktoren
	public $safeitemrootname$(){
	
	}
	#endregion
	
	#region Destruktor
	~$safeitemrootname$(){
	
	}
	#endregion
	
	#region Methoden
	#endregion
	
	#region Attribute
	#endregion
	}
}

Bei jeder Erstellung einer Klasse werden nun direkt die Regions mit passendem Konstruktor/Destruktor erstellt.

Wenn man über die Codevervollständigung eine Klasse erstellt, müsst ihr folgende Datei ändern:

{root}:{Installationspfad}\Microsoft Visual Studio 8\VC#\Snippets\1031\Visual C#\class.snippet


<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
	<CodeSnippet Format="1.0.0">
		<Header>
			<Title>class</Title>
			<Shortcut>class</Shortcut>
			<Description>Codeausschnitt für Klasse</Description>
			<Author>Microsoft Corporation</Author>
			<SnippetTypes>
				<SnippetType>Expansion</SnippetType>
				<SnippetType>SurroundsWith</SnippetType>
			</SnippetTypes>
		</Header>
		<Snippet>
			<Declarations>
				<Literal>
					<ID>name</ID>
					<ToolTip>Klassenname</ToolTip>
					<Default>MyClass</Default>
				</Literal>
			</Declarations>
			<Code Language="csharp"><![CDATA[class $name$
	{
  #region Variablen
  #endregion
  
  #region Konstruktoren
  public $name$()
  {
  
  }
  #endregion
  
  #region Destruktor
  ~$name$()
  {
  
  }
  
  #region Methoden
  #endregion
  
  #region Attribute
  #endregion
		$selected$$end$
	}]]>
			</Code>
		</Snippet>
	</CodeSnippet>
</CodeSnippets>

in Wort zur Codevervollständigung:
Wenn man in Visual Studio Code schreibt, greift IntelliSense direkt und schlägt bekannte Begriffe vor. Wenn man nun "cla" schreibt, wird "class" vorgeschlagen. Drückt man 2x TAB, wird ein Snippet eingefügt. Wenn ihr wie oben beschrieben das Snippet geändert habt, wird nun die Klasse mit den Regions eingefügt. Man muss lediglich den Klassennamen vergeben und mit <Enter> bestätigen.

Den Artikel konnte ich nur in VS2005 testen.

Vorschläge für Erweiterungen des Artikels sind erwünscht. Zum Beispiel wäre es auch interessant zu wissen wie sowas in anderen IDEs geht.
Fehler bitte auch melden.

21.05.2008 - 10:45 Uhr

danke norman_timo,

in der Tat habe ich einen Selbstaufruf gehabt. Den habe ich behoben und kann jetzt auch die Daten abfragen. Allerdings bleibt das Problem mit den Fragezeichen beim Debuggen (siehe Bild im ersten Beitrag).

Hier meine Attribute:

        public string Raum
        {
            get
            {
                return i_Raum;
            }
        }

        public string Klasse
        {
            get
            {
                return i_Klasse;
            }
        }

        public string Fach
        {
            get
            {
                return i_Fach;
            }
        }

        public int Unterrichtsstunde
        {
            get
            {
                return i_Unterrichtsstunde;
            }
        }

Ich habe auch noch eine statische Methode in der Klasse. Kann mir aber nicht vorstellen, dass dieses Verhalten von dieser Methode kommt, die sowieso nicht aufgerufen wird.

21.05.2008 - 02:25 Uhr

Hallo myCSharp-Community,

ich habe einen Fehler, den ich in meiner kurzen Laufbahn als Programmierer noch nie hatte.

Ich versuche eine Instanz meiner Klasse "Stundenplan" zu erstellen. Funktioniert tadellos. Wenn ich aber im Debugmodus das Objekt betrachte, kann mir VS nicht richtig anzeigen. Zumindest scheint es so.

Konstruktor meiner Klasse

        public Stundenplan(string e_Raum, string e_Klasse, string e_Fach, int e_Unterrichtsstunde)
        {
            i_Raum = e_Raum;
            i_Klasse = e_Klasse;
            i_Fach = e_Fach;
            i_Unterrichtsstunde = e_Unterrichtsstunde;
        }

meine Instanzierung

Stundenplan st = new Stundenplan("1.506", "E1FI2", "SAE", 1);

Wenn ich auf Eigenschaften des Objektes zugreifen will, bekomme ich eine StackOverflowException.

Kann mir jemand einen Tipp geben woran das liegen kann?

13.05.2008 - 16:48 Uhr

Wie kann man denn eine CSV-Datei nach Excel exportieren?
einfach mit excel öffnen? :evil:

du solltest einfach eine liste mit den tabellenspalten haben.

string[] spalten = new string[] {"spalte1","spalte3","spalte2"};  

lade eine zeile deiner csv und importiere sie dann.

spalte1 der csv kommt in spalte1 in DB.
spalte2 der csv kommt in spalte3 in DB.
spalte3 der csv kommt in spalte2 in DB.

ähnlich kannst du dann bei verschiedenen tabellen vorgehen. im spaltenarray steht dann eben was anderes drin worauf du reagieren kannst.

string[] spalten = new string[] {"tabelle2.spalte1","tabelle3.spalte3","tabelle1.spalte2"};

spalte1 der csv kommt in tabelle2.spalte1 in DB.
usw...

13.05.2008 - 16:42 Uhr

Wie kann man denn eine CSV-Datei nach Excel exportieren?

einfach mit excel öffnen? :evil:

du solltest einfach eine liste mit den tabellenspalten haben.

string[] spalten = new string[] {"spalte1","spalte3","spalte2"};

lade eine zeile deiner csv und importiere sie dann.

spalte1 der csv kommt in spalte1 in DB.
spalte2 der csv kommt in spalte3 in DB.
spalte3 der csv kommt in spalte2 in DB.

08.04.2008 - 11:03 Uhr
string s = "Mein text hat viele <rot>zeilen, aber kann auch <br> oder \n enthalten und noch viel mehr";
s = s.Replace("<rot>", "<font color>");

gibt auch eine überladung in der man strings angeben kann.

03.04.2008 - 14:26 Uhr

du könntest auch mit blender den würfel erstellen und texturieren

03.04.2008 - 13:14 Uhr

unbedingt drauf achten, ob der monitor das mitmacht!!! wenn nicht, is der hinüber. du kannst ja auch 100hz auf monitor machen und trotzdem 40bilder/s machen.

11.03.2008 - 13:18 Uhr

wieso modellst du dir das objekt nicht in einem programm dafür, speicherst es als mesh und lädst es auch als solches in directx?

06.03.2008 - 17:51 Uhr

also für mich wird die nummer 8 dadurch begründet, dass sie nun die webstandars der wc3 versuchen 1:1 umzusetzen.

das ist ganz klar eine neue version.

21.02.2008 - 13:02 Uhr

wenn du im SELECT teil "feld2" weg lässt, zählt er alle datensätze in "daten".
wenn du allerdings ein GROUP BY feld2 hinten dran stellst, zählt er alle vorkommnisse von den werten in feld2.

was ich sagen will: wenn man aggregatfunktionen benutzt und zusätzlich eine spalte ausgeben lässt, braucht man group by

21.02.2008 - 11:53 Uhr

Lösung?

ich denke mal folgendes hat gefehlt:

this.Controls.Add(ultraLabel_FirmwareDiscription2);
14.02.2008 - 14:16 Uhr

DB Designer kostenlos und OpenSource

ansonsten mal hier vorbeischauen Osalt.com

07.02.2008 - 16:35 Uhr

ich habe in meiner VS2005 EE eine SQLite DB als Datenquelle einbinden können. Sollte also auch mit MySql funktionieren.

06.02.2008 - 12:15 Uhr
public Err(usecase1 uc1)
		{
			usecase1 = uc1;	
		}

du hast eine variable die den gleichen namen hat wie dein enum. sollte das problem verursachen.

04.02.2008 - 15:16 Uhr

vielleicht XMLDocument.toString()

oder XMLDocument.InnerHTML

12.11.2007 - 11:08 Uhr

Dann solltest du die Fehlermeldung im catch-Block mal abfangen. Vielleicht kann jemand was mit der Meldung anfangen.


catch (Exception ex){
 Console.Write(ex.toString()); // Fehler beim Öffnen der Datei
}
23.10.2007 - 16:28 Uhr

Beachte, dass die Progressbar sehr lange braucht um ihren Status zu aktualisieren. Wenn man also sehr oft (zB nach jedem geschriebenen Byte) die Bar aktualisiert, dann frisst das so viel Performance, dass das hochladen einer Datei durchaus ein paar Minuten länger dauert. Also nicht bei jedem Byte aktualisieren, sondern eben bei jedem 100. oder noch größere Schritte.

22.10.2007 - 11:41 Uhr

danke.

wie schon 'Schattenkanzler' sagte:

Wow, so kurz?

21.10.2007 - 15:16 Uhr

mit einer häufigkeitstabelle haben wir das mittlerweile gelöst. allerdings bin ich immernoch an daran interessiert wie man alle möglichkeiten herausfindet. die lösungsfindung ist - da wir die lösung schon haben - mir egal. ich will einfach nur wissen wie man sowas rechnet.

18.10.2007 - 22:20 Uhr

Hallo,

ein Freund von mir hat eine Aufgabe bekommen einen Text zu dechiffrieren. Natürlich gibts hier die Möglichkeit per Hand den Text zu entschlüsseln, allerdings will ich das mit C# lösen. Mein erster Gedanke bei dem Text war die Bruteforce Methode. Stellt sich wohl als einfachste Möglichkeit - leider auch im Ergebnis nicht die Beste - heraus.

Bei dem Text handelt es sich höchst wahrscheinlich nur um gemischte Buchstaben. Zum Beispiel wurde aus dem E ein B gemacht und aus dem I ein Y.

Nun würde ich gerne wissen, wie ich sowas angehe. Ich habe mir ein Dictionary angelegt und dort im Key die echten Buchstaben und im Value den gemischten. Für mich stellt sich jetzt die Frage wie ich die Buchstaben in meinem Value am besten mische um alle Möglichkeiten abzufangen.

Würde mich über Denkanstöße freuen.

unclesam

08.10.2007 - 15:29 Uhr

ich glaub du musst vorher mal die FAQ angucken

FAQ Artikel

02.10.2007 - 18:40 Uhr

            StreamReader sReader = new StreamReader("C:\\deineDatei.csv");
            while (!sReader.EndOfStream)
            {
                string[] s = sReader.ReadLine().Split(new char[] { ',' });
                //Mit s dann machen was du willst
            }

...und mit der ProgressBar würde ich vorher die Datei durchlaufen und gucken wieviele Zeilen drin sind. Ich hab sowas auch gemacht mit einer 70MB großen CSV (700.000 - 900.000 Datensätze) und das zählen der Zeilen geht in unter 1 Sekunde.

Ich hab beim Splitten \n nicht drin, weil das ja das Zeichen für eine neue Zeile ist. Das sollte sowieso nicht drin sein, da ja Zeilenweise gelesen wird.

02.10.2007 - 11:40 Uhr

und in den INSERT queries gleich mehrere queries packen (zusätzlich zu transactions)

02.10.2007 - 11:20 Uhr

Ist 'ReadPBar' eine ProgressBar? Wenn ja, dann solltest du diese nicht bei jeder ausgelesenen Zeile aktualisieren. Die Aktualisierung der ProgressBar verschlingt wertvolle Zeit. Am besten einen Counter mitlaufen lassen und bei größeren Schritten aktualisieren.

25.09.2007 - 22:40 Uhr

Ich hatte die Methode, welche mein Mesh läd und zeichnet, nicht zwischen Start und EndScene stehen. Deswegen kam es zu dieser Fehlermeldung.

25.09.2007 - 14:55 Uhr

dataGridView1[spalte,reihe].Value

25.09.2007 - 13:01 Uhr

in deiner view-matrix (welche ja die kamera darstellt) hat man doch 3 vektoren.

kameraposition, kamerablickrichtung und die normale der kamera. die kamerablickrichtung ist dann die schussrichtung.

24.09.2007 - 23:00 Uhr

Hallo,

ich versuche zur Zeit ein Mesh zu laden und zu rendern. Allerdings bekomme ich eine Exception, wenn ich die DrawSubset-Methode von meinem Mesh benutze.
Ich habe bei Google keinen passenden Beitrag gefunden, mein Buch und die Beispiele zu rate gezogen und feststellen müssen, dass die Docu von DirectX einen im Regen stehen lässt. Die Exception ist wie immer bei DirectX nicht gerade aussagekräftig, will sie euch aber trotzdem nicht vorenthalten:

"Fehler in der Anwendung.
-2005530516 (D3DERR_INVALIDCALL)
bei Microsoft.DirectX.Direct3D.BaseMesh.DrawSubset(Int32 attributeID)
bei Game_Projekt.GameEngine.GFX.Terrain.TerrainBase.loadTerrainFromFile() in Zeile 45."


using IO = System.IO;
using DX = Microsoft.DirectX.Direct3D;


        void loadTerrainFromFile()
        {
            DX.ExtendedMaterial[] materials;

            GameEngine.GFX.GFXBase.graphDevice.Transform.World = Microsoft.DirectX.Matrix.Translation(0f, 0f, 0f);

            if(IO.File.Exists(IO.Path.Combine(Environment.CurrentDirectory, "testmap.x")))
            {
                DX.Mesh mesh = DX.Mesh.FromFile(IO.Path.Combine(Environment.CurrentDirectory, "testmap.x"), DX.MeshFlags.Managed, GameEngine.GFX.GFXBase.graphDevice, out materials);
                DX.Material[] matArray = new DX.Material[materials.Length];

                Dictionary<string, DX.Texture> textures = new Dictionary<string, DX.Texture>();
                for (int x = 0; x != materials.Length; x++)
                {
                    if (!string.IsNullOrEmpty(materials[x].TextureFilename))
                    {
                        matArray[x] = materials[x].Material3D;
                        matArray[x].Ambient = matArray[x].Diffuse;
                        textures.Add(materials[x].TextureFilename, DX.TextureLoader.FromFile(GameEngine.GFX.GFXBase.graphDevice, materials[x].TextureFilename));
                    }
                }
                for (int x = 0; x != materials.Length; x++)
                {
                    if (!string.IsNullOrEmpty(materials[x].TextureFilename))
                    {
                        GameEngine.GFX.GFXBase.graphDevice.SetTexture(0, textures[materials[x].TextureFilename]);
                        GameEngine.GFX.GFXBase.graphDevice.Material = matArray[x];
                    }
                    try
                    {
                        mesh.DrawSubset(x);
                    }
                    catch (DX.Direct3DXException ex)
                    {
                        System.Windows.Forms.MessageBox.Show(ex.ToString());
                    }                    
                }
            }
        }

Ich halte mich beim Code an die vielen Beispiele, welche ich gefunden habe. Ich hoffe ihr könnt mir bei diesem Problem weiterhelfen.

20.08.2007 - 17:10 Uhr

also ich habe schon mal erlebt, dass benutzer dafür bestraft wurden, dass sie die hausaufgaben für andere leute machen. statt dessen soll das forum doch zum anregen dienen.
mein zweiter kritikpunkt der antworten ist die komplexität der antworten. das ist eine einfache aufgabe und ihr kommt mit enumerablen und objekten. so wie sich anhört ist Kleba ein anfänger und dürfte damit noch nichts anfangen können. es ist zwar richtig, dass man sich diesen programmierstil angewöhnt, jedoch sollte man nicht einfach mit dem eigenen wissen prahlen und einfach mal lösungen hinklatschen. statt dessen sollte man hilfestellungen geben, welche hier fast zu kurz kommen.

ich empfehle ja ein struktogramm für dieses problem zu machen um das verständnisproblem an der wurzel zu packen warum es denn auf einmal falsch läuft. später dann noch mit dem debugger schritt für schritt den quellcode verfolgen und gucken wie sich die variablen und die abfragen verhalten.

06.08.2007 - 11:38 Uhr

http://www.codeproject.com/cs/database/ImageSaveInDataBase.asp

die benutzen hier MsSql und haben ein datenbankfeld vom typ image.

in MySql habe ich ein byte-array in einem blob(binary) feld gespeichert und die länge des arrays in einem extra feld.

04.07.2007 - 17:36 Uhr
        /// <summary>
        /// Gibt alle Unterverzeichnisse aus. Leider auch doppelte Einträge
        /// </summary>
        /// <param name="dirs">Das Array mit den Pfaden</param>
        /// <param name="search">Ordner von dem die Unterverzeichnisse ausgegeben werden sollen (z.B. home/golo)</param>
        /// <returns>Ein Array mit den Unterverzeichnissen</returns>
        static List<string> searchSubDirectories(string[] dirs, string search)
        {
            List<string> subdirectories = new List<string>();
            foreach(string dir in dirs)
            {
                if (dir.StartsWith(search))
                {
                    string str = dir.Remove(0, search.Length);
                    if (str.Length != 0)
                    {
                        str = str.Substring(1, str.Length-1);
                        if (str.IndexOf('/') > 0)
                        {
                            subdirectories.Add(str.Substring(0,str.IndexOf('/')));
                        }
                        else
                        {
                            subdirectories.Add(str);
                        }
                    }
                }
            }
            return subdirectories;
        }
04.07.2007 - 15:54 Uhr

ich würde jetzt so rangehen, dass ich eine klasse erstelle und dort 2 arrays habe für die jeweiligen comboboxen. dort speicherst du die einträge. wenn dann die erste form ihren fokus wiedererhält, dann aktualisierst du deine listbox. so habe ich das erst letzte woche auch gemacht.

04.07.2007 - 15:51 Uhr

kann auch die ordnerangabe mehrere levels haben?

also zB: /home/golo ?

ich verstehe jetzt das ganze so, dass du die bestehende ordnerstruktur übergeben bekommst und zwar sind die pfade in einem feld des arrays und du willst daraus jetzt eine ordnerstruktur bauen. ich hoffe ich verstehe das richtig.

da würde ich mal bei "/" teilen. da bekommst du die ordner heraus. das 0. element stellt dann immer root dar. wenn man alle elemente hat, geht man in die nächst höhere ebene (1.) und fügt dort alle unterordner einer liste hinzu.

wenn du jetzt den übergebenen ordner auch wieder bei "/" teilst und dann deine liste nach durchgehst, dann bekommst du doch die ganzen unterordner.

EDIT:

wenn du die verzeichnisse

home
home/golo
home/golo/abc
home/xyz
home/xyz/aaa

bei "/" teilst, kann man ja anhand der arraylänge erkennen für welche ebene man das array benutzt.