Ist klug sowas mit VB.Net zu machen, oder muss SQL her?

Norbert Eder

Erfahrenes Mitglied
Ah, ich hab jetzt erst gesehen, dass du eigentlich in VB.NET programmierst. Na solltest du mit dem obigen Sourcecode von mir Probleme haben, kann ichs dir schon übersetzen.
 

Vamp7771

Mitglied
Anfangs habe ich die Daten anonymisiert, jedoch mache ich das nicht mehr, da diese Daten nur testdaten sind, wie ich rausgefunden habe.

Diese Daten haben keinerlei Auswirkung auf das Unternehmen, überigens stimmt nicht mal der Firmenname ^ ^

Ist eine TestFirma


Natürlich kann ich das Programm genauso gut in SQL schreiben, ich sehe da gar keine Probleme.

Ich muss aus dem Txt File in Tabellen nur bestimmte Prefixe importieren und diese mit der sort by richtig sortieren.


@ Norbert

Falls Lust und Zeit hast, kannst gerne mal den code auf VB.Net übersetzen.
Ich mach mich auch grade dran.
 

mage

Erfahrenes Mitglied
Vamp7771 hat gesagt.:
Anfangs habe ich die Daten anonymisiert, jedoch mache ich das nicht mehr, da diese Daten nur testdaten sind, wie ich rausgefunden habe.
..
War nur ein gut gemeinter Hinweis meinerseits.

Vamp7771 hat gesagt.:
Natürlich kann ich das Programm genauso gut in SQL schreiben, ich sehe da gar keine Probleme.
Man sollte die Werkzeuge einsetzen wozu sie am besten geeignet sind.
Ich würde auch nicht versuchen, mit einem Küchenmesser einen Baum zu fällen und mit einer Kettensäge Gemüse zu zerkleinern.
Bei der Gelegenheit ersetze ich das Wort "normale" Programmiersprachen gegen klassische Programmiersprachen :)


Im übrigen sollte die XML Datei vielleicht nur einmal bei Start des Programmes oder der Analysefunktion geladen werden.
 

Norbert Eder

Erfahrenes Mitglied
mage hat gesagt.:
Im übrigen sollte die XML Datei vielleicht nur einmal bei Start des Programmes oder der Analysefunktion geladen werden.
Damit hast du natürlich recht. Eine weitere Möglichkeit wäre einen FileSystemWatcher auf diese Datei zu legen, dass Änderungen sofort eingelesen werden, sollten sich eben Änderungen ergeben. Hier liegt definitiv Optimierungs-Potential.
 

Vamp7771

Mitglied
@mage, klar ich habe es auch als gutgemeinten Hinweis verstanden, danke : )

SQL - also ich würde ja sogar mit einem Esslöffel auf einen Mammutbaum losgehen, hauptsache das Ding fällt mal um *scherz*

@ XML, arbeite mich da grade erst rein, bin noch wirklich Anfänger, aber die Punkte, die mage und Norbert angesprochen haben, erscheinen mir wirklich eindeutig und effektiv zu sein.

Also praktisch im "Load" bereich oder im "init" den XML Pfad usw. anlegen, hm?
"System File Watcher" sagt mir noch nicht so viel, aber auch da kann ich mich einarbeiten.

Vielen Dank an euch alle Jungs (nun muss ich als Frau gestehen, ab und zu ist es doch besser den Mann um Rat zu fragen) ^ ^ :p

Für weitere Vorschläge zur Optimierung, Translation usw. oder auch für Code Beispiele bin ich weiterhin unglaublich dankbar

Vamp
 
Zuletzt bearbeitet:

Thomas Darimont

Erfahrenes Mitglied
Hallo!

Na ja, wenn du ja jetzt mit XML arbeitest ist der Link: http://www.tutorials.de/forum/showpost.php?p=1189156&postcount=10
doch fuer dich interessant... ;)

Btw.: @Norbert:
Code:
 public string GetDescriptionFromTag(string tag) {
   XmlDocument doc = new XmlDocument();
   doc.Load("C:\\mytaglist.xml");
   XmlNode xn = doc.SelectSingleNode("/editaglist/tag[@short='" + tag + "']");
   if (xn != null)
 	return xn.InnerText;
   else
 	return "not found";
 }
...boese, boese ... du wolltest doch nicht etwa fuer jeden Element-Zugriff das Dokument nochmal neu parsen/laden ... doc.Load("C:\\mytaglist.xml");

Gruss Tom
 

Norbert Eder

Erfahrenes Mitglied
Es sollte auch nur zeigen wie sowas geht und keine perfekte Lösung bieten ;-) Aber nachdem ihr ja eigentlich recht habt, hier eine Lösung und das auch noch in VB.NET
Code:
Public Class Translator

    Private Shared translations As Hashtable
    Private Shared isOpen As Boolean = False
    Private Shared fname As String = Nothing

    Public Shared Sub Filename(ByVal name As String)
        fname = name
    End Sub

    Private Shared Sub ReadEntries()
        If fname <> Nothing Then
            translations = New Hashtable
            Dim doc As XmlDocument = New XmlDocument
            doc.Load(fname)
            Debug.WriteLine("Open File")
            Dim xnl As XmlNodeList = doc.SelectNodes("/edittaglist/tag")
            If Not xnl Is Nothing And xnl.Count > 0 Then
                Dim i As Integer
                Dim xn As XmlNode
                Dim att As XmlAttribute
                For i = 0 To i = xnl.Count
                    xn = xnl(i)
                    att = xn.Attributes(0)
                    If Not att Is Nothing Then
                        If Not translations.Contains(att.InnerText) Then
                            translations.Add(att.InnerText, xn.InnerText)
                        End If
                    End If
                Next
                isOpen = True
            End If
        End If
    End Sub

    Public Shared Function GetText(ByVal tag As String) As String
        If Not isOpen Then
            ReadEntries()
        End If
        Return translations(tag)
    End Function

End Class
Der Translator ist eine statische Klasse, der das File natürlich nur einmal einliest und bei jeder Anfrage das gewünschte zurückliefert. Fehlerabfragen müssen allerdings noch implementiert werden, das hab ich mir jetzt aus Zeitmangel gespart.

Wie wird das verwendet? In deiner Form oder wo immer du das verwenden willst:
Code:
Translator.Filename(Application.StartupPath + "\taglist.xml")
MessageBox.Show(Translator.GetText("LIN"))
Den Filename am besten an einer Stelle setzen, die nur einmalig aufgerufen wird (Konstruktor, oder vor dem esten Aufruf). Mit Translator.GetText(Kürzel) wird die dahinterliegende Hashtable durchsucht und der Langtext zurückgegeben.

Das XML-File sieht so aus:
Code:
<?xml version="1.0" encoding="utf-8" ?> 
<edittaglist>
  <tag short="LIN">Line item number</tag>
  <tag short="WTF">What the fuck</tag>
  <tag short="RTFM">Read the fucking manual</tag>
</edittaglist>
Weitere Tags müssen da natürlich noch angefügt werden.

Viel Spaß.
 

SoL_Psycho

Grünschnabel
Noch ne kleine Anmerkung zum FileSystemWatcher:
Eigentlich ganz einfach zu benutzen, das Ding, lies dich da mal ein, kann ich nur empfehlen, brauchte ich auch bei nem Projekt letztens :)

Ein CodeBeispiel mit einigen zusätzlichen Anmerkungen:

Code:
Imports System.IO

[...]

Private FSW As New FileSystemWatcher

[...]
Private Sub FSW_Init()
        'Initializes FileSystemWatcher by giving it attributes
        'Pfadnamen des zu überwachenden Objektes / Ordners
        FSW.Path = Path

        'Falls ein File überwacht werden soll, hier den FileNamen angeben
        FSW.Filter = File

        'Startet praktisch die Überwachung
        FSW.EnableRaisingEvents() = True

        'Damit wird gesagt, auf was er alles reagieren soll, in unserem Falle 
        'Attributveränderungen (Schreibgeschützt, etc.), Erstellungszeitpunkt, letzter
        'Schreibzugriff, Namensänderung oder Größenänderung
        FSW.NotifyFilter = NotifyFilters.Attributes Or _
        NotifyFilters.CreationTime Or _
        NotifyFilters.LastWrite Or _
        NotifyFilters.FileName Or _
        NotifyFilters.Size

        'AddHandlers for Changes @ the watched File
        'Hier erstellst du praktisch Handler, die ihm sagen, was er machen soll, wenn das
        'rote Ereignis passiert, in unserm Fall, springt er nach unten
        AddHandler FSW.Changed, AddressOf FSW_Change
        AddHandler FSW.Renamed, AddressOf FSW_Name
End Sub

Public Sub FSW_Change(ByVal source As Object, ByVal e As FileSystemEventArgs)
        AutomaticOpen()
End Sub

Public Sub FSW_Name(ByVal source As Object, ByVal e As RenamedEventArgs)
        StareonPathAndFile = e.FullPath
        AutomaticOpen()
End Sub
 
Zuletzt bearbeitet:

Vamp7771

Mitglied
OMG! Ihr seit einfach KLASSE, Jungs!

(Was würde ich nur ohne euch tun)

Vielen Dank, nur so zur Neugier - wie lange Programmiert ihr denn schon, dass ihr einfach so in 5min solche Codes euch aus dem Ärmel schütten könnt...
Hoffentlich werde ich auch mal so gut werden wie Ihr.

(Habe bald meinen VB.Net Lehrgang, dann kann ich vielleicht eher mitreden)

Ich versuch nun die super Vorschläge von euch umzusetzen (@ Norbert & Co. - Riesen Dank für die Codebeispiele)

Ich melde mich in Morgen und sag bescheid wie weit ich nun bin.

Schönen Abend und Gute Nacht @All

bis morgen!

Vamp
 

Vamp7771

Mitglied
@ Norbert :

Ich habe wieder einmal eine Frage:
Du hast mir den Code geschrieben, damit ich das xml File auslesen und öffnen kann.
Ich krieg es aber nicht hin, da er jedes mal in den falschen Pfad einsteigen möchte.

wie kann ich im Code z.B.: "c:\taglist.xml" als Pfad angeben, ich habe es mit dem "Application Startup...usw versucht, aber er macht das einfach nicht : (