Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von davidG
Thema: Compare strings special order [natural sorting]
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

natural sorting klingt echt interessant und jetzt habe ich auch gecheckt, was du wolltest.

Thema: Compare strings special order [natural sorting]
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

wohl ein missverständnis

Thema: Compare strings special order [natural sorting]
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Oder wenn du ausschließen kannst, dass nach dem _ was anderes als zahlen kommst, könntest du den string auch mit string.Split("_") teilen

Thema: Compare strings special order [natural sorting]
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Naja, mir war nicht genau so klar, wo dein Problem liegt und nachdem du schon ein Regex-Pattern gepostet hattest, dachte ich, dass du diese Problem schon gelöst hättest.

Du kannst ja den String-Wert in einen Int Wert casten.

Für Reguläre-Ausdrücke gibt es ein klasse Tool (Regex-Lab) von herbivore mit dem man Patterns erstellen / testen kann: Regex-Lab

Das Pattern, mit dem du zum einen den String-Wert (z.B. Affe) und anschließend den numerischen Wert (1) bekommst, lautet: (\w+)_(\d+)

Bei "affe_1" bekommst du somit für den ersten Wert affe und für den zweiten wert die 1.

Ein Regex-Tutorial gibt es hier: Regex Tutorial

So könntest du auch Match-Ergebnisse zu greifen:


Regex myRegex = new Regex("(\\w+)_(\\d+)");
Match myMatch = myRegex.Match(content);

while (myMatch.Success)
{
     string stringValue = myMatch.Groups[1].Value;
     int digitValue =  int.Parse( myMatch.Groups[2].Value)

     myMatch = myMatch.NextMatch();
}

Und so hättest du die einzelnen Werte

Thema: StreamWriter Exception: The process cannot access the file x because it is being used ...
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Nur eine Vermutung. Ist evtl. das erstellen der csv Datei noch nicht beendet, wenn du mittels StreamWriter zugreifst? Also das der Code zu schnell ausgeführt wird?

Testen könntest du es, in dem du den Thread mit Thread.Sleep(1000) für eine Sekunde oder länger kurz schlafen lässt.

Wäre es evlt. sinnvoller, die Datei erst im Speicher zu erstellen und anschließend auf die Platte zu schreiben?

Thema: Zwei Zahlen einlesen, ohne den Code zum Einlesen einer Zahl duplizieren zu müssen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ich nehme an, dass du mit C# noch nicht so viel Erfahrung gemacht hast. Unter Galileo Open Book steht einiges über Verzweigungen (zb. If) und über Schleifen (zb. do - while).

Um einen weiteren Wert einzulesen musst du eben nochmal eine Zeile aus der Console lesen. Für zahl1 hast du das ja shcon geschafft.

Zitat
mit &&?
Ja.

Thema: Zwei Zahlen einlesen, ohne den Code zum Einlesen einer Zahl duplizieren zu müssen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo konsole93,

ich glaube ich darf dich bei myCSharp.de Willkommen heißen.

Für die Leserlichkeit wäre es sehr hilfreich, wenn du deinen Code mittels dem

-Tag hervorheben würdest.
[COLOR]Bitte beachtet [URL] Wie poste ich richtig?[/URL] [/COLOR]

Was soll denn mit der zahl2 passieren?

Grüße
DavidG

Thema: Compare strings special order [natural sorting]
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Wie wäre es, wenn du dir eine Klasse für die einzelne Items baust. In der Klasse hast du ein Feld für den Zahlenwert und ein Feld für den String Wert. Desweiteren implementiert die Klasse das Interface IComparable<T>. Du musst die Methode CompareTo(Item item) ausimplementieren. Dort überprüfen, ob der die Stringwerte gleich sind. Ist dies der Fall, die Zahlenwerte miteinander verlgeichen.

Anschließend kannst du über List.Sort() die Liste sortieren lassen.

z.b.

    
public class Item : IComparable<Item>
    {
        private int _digit;

        private string _str;

        public int Digit
        {
            get { return _digit; }
            set { _digit = value; }
        }

        public string Str
        {
            get { return _str; }
            set { _str = value; }
        }

        public int CompareTo(Item other)
        {
            if(_str.CompareTo(other.Str)== 0)
            {
                return _digit.CompareTo(other.Digit);
            }

            return _str.CompareTo(other.Str);
        }
    }

Thema: Compare strings special order [natural sorting]
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Moin,

ich wüsste grad keinen feritgen Comparer, der sowas schon kann. (Lasse mich aber auch gerne belehren.

Wie liegen dir die Strings vor? Als List oder Array oder... ?
Trifft auf jeden String das Must item_x (x ist eine Zahl) zu?

Willst du nur nach der Zahl sortieren oder spielt der String, der vor der Zahl steht, auch eine Rolle?

Grüße
DavidG

Thema: Sperrt das anlegen einer neuen Tabelle im SQL Server 2000 die Datenbank?
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: SQL Server 2000

Hallo,

ich muss in einer produktiv Datenbank ein paar neue Tabellen (via DDL-Statements) anlegen, welche nicht weiter komplex sind. Jetzt ist meine Frage, ob der SQL Server 2000 die komplette Datenbank sperrt, sobald neue Tabellen angelegt werden oder ob die Datenbank während dem Anlegen neuer Tabellen verfügbar bleibt.

Vielen Dank

Gruß
David

Thema: Methodenaufruf funktioniert auf PC (Vista) allerdings nicht auf Server (Windows 2003)
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

ich habs. Ich hatte vergessen die FirebirdSql.Data.FirebirdClient.dll mit auf den Server zu kopieren. Jetzt funktioniert es.
Was ich aber nicht ganz verstehe, warum nichts ins Log File geschrieben wurde, weil der Befehl fürs logging ja vor den Firebird-Befehlen kommt.

Thema: Methodenaufruf funktioniert auf PC (Vista) allerdings nicht auf Server (Windows 2003)
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

ja,diese werden erzeugt

Thema: Methodenaufruf funktioniert auf PC (Vista) allerdings nicht auf Server (Windows 2003)
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

mhh...

es sollte ja als erstes in der methode was ins log-file geschrieben werden:


        private void InsertResultSet()
        {
            if (_log.IsInfoEnabled)
            {
                _log.Info("Start Insert Pop Up");
            }
...

aber im log-file wird eben dieser eintrag nicht geschrieben. und die if bedingung ist auch wahr.

ich glaube ich versuche mich mal mit remote debugging zu beschäftigen

Thema: Methodenaufruf funktioniert auf PC (Vista) allerdings nicht auf Server (Windows 2003)
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

was meinst du mit Standard-Konfigurationseigenschaften? steh grad auf dem schlauch.
meinst du damit die settings, die in der app.exe.config drinnen sind? die datei ist auf dem server und auch angepasst.

Thema: Methodenaufruf funktioniert auf PC (Vista) allerdings nicht auf Server (Windows 2003)
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Auf dem Server habe ich leider keinen Debugger

Thema: Methodenaufruf funktioniert auf PC (Vista) allerdings nicht auf Server (Windows 2003)
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

.Net Framework 2.0
Visual Studio 2008

PC - Windows Vista
Server - Windows 2003

Hallo,

ich habe folgendes Problem:
Ich habe einen Timer. Wenn dieser Timer auslöst, dann soll eine Methode aufgerufen werden, die Daten in eine Datenbank einträgt. Auf meinem Entwicklungs-PC funktioniert das alles wunderbar. Kopiere ich die .exe Datei auf meinen Windowsserver, auf dem die Anwendungen laufen soll, funktioniert der aufruf der Methode nicht. Es wird auch keine Fehlermeldung ausgespuckt, es passiert einfach gar nichts. So als hätte ich einen Breakpoint gesetzt.

Hier ist der Timer-Event-Code:


        void  _timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            if (_log.IsInfoEnabled)
            {
                _log.Info("Timer Elapsed");
            }
            _timer.Stop();

            if (_log.IsInfoEnabled)
            {
                _log.Info("Before InsertResultSet " + InputWordList.Count.ToString());
            }

           InsertResultSet();
         }

Hier ist der Code, der Methode "InsertResultSet":


        private void InsertResultSet()
        {
            if (_log.IsInfoEnabled)
            {
                _log.Info("Start Insert Pop Up");
            }

            if (!InProcess)
            {
                try
                {
                    InProcess = true;

                    using(FbConnection fbCon = new FbConnection(Properties.Settings.Default.ConnectionPopUp))
                    using(FbCommand fbCmd = new FbCommand("INSERT INTO tblInputWords (wordID, quantity, sourceID, point)"+
                        "VALUES (@wordID,@count,@sourceID, @point)"))
                    {
                        fbCon.Open();
                        FbTransaction fbTra = fbCon.BeginTransaction();
                        
                        fbCmd.Connection = fbCon;
                        fbCmd.Transaction = fbTra;

                        try
                        { 
                            for(int index = 0; index < InputWordList.Count;)
                            {
                                fbCmd.Parameters.AddWithValue("@wordID", InputWordList[index].WordId);
                                fbCmd.Parameters.AddWithValue("@count", InputWordList[index].Count);
                                fbCmd.Parameters.AddWithValue("@sourceID", InputWordList[index].SourceID);
                                fbCmd.Parameters.AddWithValue("@point", InputWordList[index].TimeStamp);

                                fbCmd.ExecuteNonQuery();

                                fbCmd.Parameters.Clear();
                                InputWordList.RemoveAt(index);
                            }

                            fbTra.Commit();
                        }
                        catch(Exception ex)
                        {
                            _log.Fatal(ex.Message + " - " + ex.StackTrace);
                        }
                        finally
                        {
                            fbTra.Dispose();
                            fbCon.Close();
                        }
                    }
                }
                catch (Exception ex)
                {
                    _log.Fatal(ex.Message + " - " + ex.StackTrace);
                }
                finally
                {
                    InProcess = false;
                    _timer.Start();
                }
            }
            else
            {
                _timer.Start();
            } 
        }

Wie gesagt, funktioniert der Aufrauf der Methode auf meinem PC ohne Probleme. Auf meinem Server funktioniert das ganze nicht mehr. Alle anderen Funktionalitäten des Programmes funktionieren auf dem Server ohne Probleme. Hat jemand Ideen, an was das liegen könnte?

Vielen Dank
Grüße

Thema: Event und Übergabeparameter
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

danke für die hinweise

Thema: Event und Übergabeparameter
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Habe ich es richtig verstanden, dass du den Rückgabewert per Event weitergeben willst? Ich sehe da zwei Lösungsmöglichkeiten (Für weitere bin ich offen). Ich weiß allerdings nicht, welche die Bessere ist. Vll kann dazu jmd was sagen.

Also 1: Den Rückgabewert in eine Propertie speicher, dass Event auslösen und die Klasse die das Event abonniert hat, liest die Properite aus:


public class HandScanner
{
  private object _rueckgabe;

  public object Rueckgabe
  {
    get { return _rueckgabe;}
  }
 
  private void UeberwacheHandScanner()
  {
    if(_rueckgabe != rueckgabeNeuerPing)
    {
      _rueckgabe = rueckgabeNeuerPing;
      OnChangeEvent();
    }
  }

  public delegate void EventDelegate(object source, EventArgs e);

  public event  EventDelegate ChangeEvent;

  private void OnChangeEvent()
  {
    if(ChangeEvent != null)
    {
      ChangeEvent(this, new EventArgs());
    }
  }
}

public class VerarbeiteRueckgabe
{
  public VerarbeiteRueckgabe()
  {
    _handScanner = new HandScanner;
    _handScanner.ChangeEvent += EventDelegate(_handScanner_ChangeEvent);
  }
  private HandScanner _handScanner;
  
  private void _handScanner_ChangeEvent(object value, EventArgs e)
  {
      object rueckgabe = _handScanner.Rueckgabe;
  }
}

oder 2. den Übergabewert mit ins Event verpacken:


public class HandScanner
{
  private void UeberwacheHandScanner()
  {
    if(rueckgabeAlterPing != rueckgabeNeuerPing)
    {
       OnChangeEvent(rueckgabeNeuerPing);
    } 
  }

  public delegate void EventDelegate(object value, EventArgs e);

  public event  EventDelegate ChangeEvent;

  private void OnChangeEvent(object rueckgabe)
  {
    if(ChangeEvent != null)
    {
      ChangeEvent(rueckgabe, new EventArgs ());
    }
  }
}

public class VerarbeiteRueckgabe
{
  public VerarbeiteRueckgabe()
  {
    _handScanner = new HandScanner;
    _handScanner.ChangeEvent += EventDelegate(_handScanner_ChangeEvent);
  }
  private HandScanner _handScanner;
  
  private void _handScanner_ChangeEvent(object value, EventArgs e)
  {
      object rueckgabe = value;
  }
}

Ich habe den Code nicht getestet. Nur kurz runtergeschrieben. Wie gesagt, so würde ich es lösen, weiß allerdings nicht, welche der Beiden Methoden besser ist.

Thema: INSERT wesentlich langsamer als vergleichbarer SSIS Task (SQL Server)
Am im Forum: Datentechnologien

Klappt wunderbar: 2,3 Mio Einträge in weniger als eine Minute

Thema: INSERT wesentlich langsamer als vergleichbarer SSIS Task (SQL Server)
Am im Forum: Datentechnologien

Danke, werde ich gleich mal ausprobieren.

Thema: INSERT wesentlich langsamer als vergleichbarer SSIS Task (SQL Server)
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: MS SQL Server 2005

Ich habe eine C#-Anwendung mit der ich Daten auf verschiedene Art und Weiße anlysiere. Für eine Analyse verwenden ich den Assoziations-Alogrithmus vom MS Sql Server 2005. Die benötigten Daten selektiere ich davor und lasse sie in eine extra Tabelle eintragen. Dabei handelt es sich um 100000 - 2500000 Einträge.

Meine erste Lösung sah folgendermaßen aus: Die benötigten Daten wurden in eine List<Collection> gespeichert und anschließend via SqlCommand etc. in die DB eingetragen. Der Code sieht wie folgt aus:


       public void InsertTmpData(List<MyCol3<string, int, int>> resultList)
        {
            SqlTransaction sqlTransaction;

            using(SqlConnection sqlCon = new SqlConnection(_connection))
            {
                sqlCon.Open();
                
                sqlTransaction = sqlCon.BeginTransaction();

                try
                {
                    using (SqlCommand sqlCmd = new SqlCommand("INSERT INTO tmpData (word,urlId) VALUES (@word,@urlId)"))
                    {
                        sqlCmd.Connection = sqlCon;
                        sqlCmd.Transaction = sqlTransaction;

                        for (int index = 0; index < resultList.Count; index++)
                        {
                            sqlCmd.Parameters.AddWithValue("@word", resultList[index].ValueA);
                            sqlCmd.Parameters.AddWithValue("@urlId", resultList[index].ValueC);

                            sqlCmd.ExecuteNonQuery();

                            sqlCmd.Parameters.Clear();

                            _tmpIndex = index;
                            OnIndexEvent();
                        }
                    }

                    sqlTransaction.Commit();
                }
                catch(Exception ex)
                {
                    System.Windows.Forms.MessageBox.Show(ex.Message);
                    sqlTransaction.Rollback();
                }
                finally
                {
                    sqlCon.Close();
                }
            }
        }

Diese Variante hat bei ca. 2,3 Mio Einträge ca. 30 - 45 min gedauert. Das hat mir persönlich zu lange gedauert und ich habe nach weiteren Lösungmöglichkeiten gesucht. Gestern hatte ich die Idee, die Daten in ein XML File zu speichern und diese XML File anschließend mit einem SSIS-Datenfluss-Prozess in die Datenbank zu transferieren. Und sieh da, das Ganze dauert nicht einmal 3 Minuten. Der SSIS Task, der die Daten aus der XML-Datei in die Datenbank kopiert, brauchte ca. zwei Minuten.
Jetzt meine Frage, warum braucht mein Code 30 - 45 Minuten und der SSIS Task ca. 2 Minuten? Liegt es daran, dass SSIS viel dichter an der DB ist oder habe ich in meinem Code eine Bremse drinnen?

Thema: Control für die Darstellung eine Abhängigkeitsnetzwerkes
Am im Forum: GUI: Windows-Forms

ups - stimmt. hätte ich doch mal richtig lesen sollen

Thema: Control für die Darstellung eine Abhängigkeitsnetzwerkes
Am im Forum: GUI: Windows-Forms

zum beispiel sowas. aber ich bräuchte es als control library oder dll damit ich es in mein projekt integrieren kann.

Thema: Control für die Darstellung eine Abhängigkeitsnetzwerkes
Am im Forum: GUI: Windows-Forms

Hallo,

ich benötige ein Steuerelement, mit dem ich ein Abhängigkeitsnetzwerk - also Objekte die von einer abhängig sind oder irgendwie im Zusammenhang stehen - erstellen lassen kann.

Der Analyse Service von MS SQL Server 2005 beinhaltet ein solches Steuerelement (Dependecy-Network) was für meine Problemstellung perfekt wäre:




Leider biete MS diese Control nicht zur freien Verfügung an. Weiß jemand von, ob irgendwo solch ein Control zu Verwendung angeboten wird (kann auch gerne was kosten)? Ich konnte bis jetzt leider nichts finden.

Oder müsste ich sowas selbst programmieren?

Thema: File.Delete(filename) ohne Auswirkung
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

verwendetes Framework .Net 2.0

Ich will XML Dateien mit File.Delete(filename) löschen lassen. Allerdings passiert gar nichts, wenn dieser Befehl ausgeführt wird. Die Datei wir nich gelöscht und es gibt auch keine Fehlermeldung. Hat jemand ein Tipp woran es liegen könnte, dass das File nicht gelöscht wird?
Die XML Dateien werden von einem zweiten Programm erstellt.

Vielen Dank schon mal

Thema: Visual C# 2008 Express Edition - Kann Shockwave Flash in der Toolbox nicht finden
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hast du mal in der Toolbox - Rechts Click - Choose Item... (VS Studio 2005) aufgerufen und dort die Komponenten eingefügt?

Thema: SQL Statement analysieren
Am im Forum: Datentechnologien

Ich weiß grad nicht, ob es schon einen fertigen SQL Statement Parser im Framework gibt. Ich glaube mal nicht.
Darum müsstest du dir einen eigenen Parser bauen. Diesen könnte man mit Regulären Ausdrücken verwirklichen oder mit den String.Methoden wie string.IndexOf(), string.Substring(), string.PadRight() etc.

Thema: SqlDataReader to DataTable
Am im Forum: Datentechnologien


SqlDataAdapter myDataAdapter = new SqlDataAdapter(sqlComand);
myDataAdapter.Fill(DataTable);

Thema: For Schleife mit "Stringaufzählung"
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Was genau willst du mit dieser Schleife bewirken?

Mir ist nicht bekannt, dass man den Namen einer Variable auf deiner Weise deklarien kann (wenns doch geht dann bescheit geben).

Mir ist auch der Sinn nicht so ganz klar. Zum einen ist die Variable, die du versuchst in der Schleife zu erstellen nur in der Schleife gültig. Das heißt, sobald die Schleife ein weiters mal durchlaufen wird, würde es "bar0", wenn es möglich wäre, nicht mehr geben.

Wenn du dir fünf Werte generien lassen willst, dann verwende doch zur temporären Speicherung eine Collection. Zum Bsp:

List<int> myList =new List<int>();
myList.Add(int-wert)

Thema: zedgraph neu zeichnen?
Am im Forum: GUI: Windows-Forms

Im meiner Anwendung, in der ich ZedGraph verwende, lösche ich meinte nicht mehr gebrauchten Kurven mit:

this.ZedGraphControl.GraphPane.CurveList.Clear();