Seite 5 von 6

Verfasst: 03.06.2013, 13:42
von Jürgen T.
Hallo Marc,

der "riesige" Text wurde nicht von Ahnenblatt, sondern vom Benutzer FrankG eingetragen (ich glaube als Vorbereitung für evtl. kommende neue Felder).

Bereits bei der ersten Person sind die Daten den falschen Spalten zugeordnet.
Warum das so ist, kann ich erst mit Hilfe eines guten Editors - den ich gerade nicht verfügbar habe - sagen. Solche Sachen kommen schon mal vor, wenn in einem Feld (also zwischen zwei ") ein Tabulator drin ist. Der bringt alles durcheinander. So ein Tabulator kann eigentlich nur durch "copy and paste" da reinkommen. Ahnenblatt lässt das bei der regulären Eingabe nicht zu.

Bei der CSV-Erzeugung kann man das - meines Wissens - nicht unterdrücken. Da gibt es nur den Befehl $SAVEAS(CSVFILE), der alle Daten ausgibt.
Aber den kennst Du ja.
Ob es noch andere Befehle hierzu gibt, weiß ich nicht. Dirk hat uns noch nicht mitgeteilt, ob wir bereits alle Plugin-Befehle kennen oder ob in unserer Sammlung ( http://www.ahnenblattportal.de/viewtopic.php?t=3410 ) noch welche fehlen.

Verfasst: 03.06.2013, 14:13
von MarcP
mensch ich hätte ja auch mal in ahnenblatt selbst reinschauen können. :wallb:
da steht dieser text unter "Anmerkungen" und "Quellen". Das sah halt so automatisch erstellt aus.

Deine Vermutung stimmt.
Im Anmerkungstext sind Tabulatoren drin was mir neue Tabellenspalten erzeugt. bzw meine verschiebt das hinten nichts mehr zusammenpasst.

Hm Lösungen:
-ahnenblatt durchsucht beim exportieren nochmal alle Felder und entfernt die tabs
-gedcomexport. hab ich keine Lust und Zeit zu da genug andere Baustellen ;-)

Verfasst: 03.06.2013, 14:39
von Jürgen T.
Price hat geschrieben: Hm Lösungen:
-ahnenblatt durchsucht beim exportieren nochmal alle Felder und entfernt die tabs
-gedcomexport. hab ich keine Lust und Zeit zu da genug andere Baustellen ;-)
oder
- ich sende Dir den Code, den ich selbst mal von einem Pluginentwickler bekam. Dieser Code entfernt diese störenden Tabs.
Den Code bekam ich in VB6 und habe ihn für VB.net umgestellt.

Mach ich heute abend.

Verfasst: 03.06.2013, 14:45
von MarcP
ja mach mal bitte.
Kann ich mir grad irgendwie nicht vorstellen wie der das anstellt wenn, sagen wir alle datensätze 20spalten haben, und einer hat 21...wie er feststellt welche 2 Spalten bei dem zusammengehören.
Der zusätzliche Tab kann ja in jeden Feld fehl am Platz sein.

Ich bin mal gespannt.

Verfasst: 03.06.2013, 14:48
von MarcP
ah jetzt weiss ich.
da sind ja noch die Hochzeichen. Alles klar :D
Kannst mir trotzdem schicken. Wenn es da schon schönen Code gibt nehm ich den und hab keine Arbeit mit ;)
Heute ist nicht mein Tag.
Ist halt Montag.

Verfasst: 04.06.2013, 20:20
von Jürgen T.
Hallo Marc,

hier der Code:

Code: Alles auswählen

Private Sub Enttabben(ByRef Eingabe As String)
        Dim Tr As String = ""
        Dim Counter As Integer
        Dim Su As String = ""
        Dim neu As String = ""
        Dim Zä As Long
        Tr = vbTab
        Eingabe = Eingabe.Replace("#", "-")        
        If Rightt(Eingabe, 1) = Tr Then
            Do Until Rightt(Eingabe, 1) <> Tr
                Eingabe = Mid$(Eingabe, 1, Len(Eingabe) - 1)
                Zä = Zä + 1
            Loop

            For iii = 1 To Zä
                neu = neu & "#"
            Next iii
            Eingabe = Eingabe & neu
        End If

        For Counter = 50 To 1 Step -1
            Su = ""
            neu = ""
            For iii = 1 To Counter
                Su = Su & Tr
            Next iii
            Su = """" & Su
            Su = Su & """"

            For iii = 1 To Counter
                neu = neu & "#"
            Next iii
            neu = """" & neu
            neu = neu & """"
            Eingabe = Eingabe.Replace(Su, neu)
            Next
        Eingabe = Eingabe.Replace(Tr, " ")
        Eingabe = Eingabe.Replace("#", Tr)
        End Sub
    Private Sub Auffüllen(ByRef Füllstring As String)
        Dim m As Integer = 0
           For m = Len(Füllstring) To 4
           Füllstring = " " + Füllstring
        Next m
         End Sub

Übergeben wird eine ganze Zeile (alle Felder) einer Person.

Da es den Befehl right$ in vb.net nicht gibt wurde er nachgebildet:

Public Function Rightt(ByVal sText As String, _
      ByVal nLen As Integer) As String
        If nLen > sText.Length Then nLen = sText.Length
        Return (sText.Substring(sText.Length - nLen))
End Function
Viel Spaß

Verfasst: 04.06.2013, 21:08
von MarcP
Ah Danke. Du sollst doch feiern.
Habs inzwischen auch hinbekommen (ich konnte nicht warten ;-) ). Mit dem textfieldparser habe ich es gelöst. Aber trotzdem immer interessant andere Lösungen zu sehen

Code: Alles auswählen

      Private Function readcsv(ByRef pfad As String, ByRef trenner As String) As List(Of clAhnenDataItem)
        Dim myData As New List(Of clAhnenDataItem)  'datenspeicher aller personen

        Dim afile As FileIO.TextFieldParser = New FileIO.TextFieldParser(pfad, System.Text.Encoding.Default)
        Dim csv_line As String() 'array enthält immer eine Zeile
        afile.TextFieldType = FileIO.FieldType.Delimited
        afile.Delimiters = New String() {trenner}
        afile.HasFieldsEnclosedInQuotes = True

        Dim kopf As Boolean = True
        Do While Not afile.EndOfData        'alle zeilen durchgehen
            Try
                csv_line = afile.ReadFields
                If kopf = True Then
                    'tabellenkopf
                    leseKopf(csv_line) 'alle items der zeile durchgehen
                    kopf = False
                Else
                    'neuer datenspeicher für eine Person
                    Dim myTData As New clAhnenDataItem
                    myTData = lesePerson(csv_line)
                    If Not myTData Is Nothing Then
                        myData.Add(myTData)
                    End If
                End If
            Catch ex As FileIO.MalformedLineException
                Stop
            End Try
        Loop
        Return myData
    End Function
ich würde ja hier die "code" Marker benutzen. dummerweise kommt da nur nen 2 Zeilen Ausschnitt bei raus. Unlesbar. Marcus? Kannst du da was machen?

Verfasst: 04.06.2013, 23:57
von Marcus
Price hat geschrieben: ich würde ja hier die "code" Marker benutzen. dummerweise kommt da nur nen 2 Zeilen Ausschnitt bei raus. Unlesbar. Marcus? Kannst du da was machen?
Das ist so gedacht und auch sinnvoll, da ja von vielen Lesern eines Threads meist nur 2 oder 3 der ganze (oft endlos lange) Sermon interessiert. :D
Daher sind die vier "Steuerzeichen" im Kopf des Code-Teils, womit man den Teil erweitern, verkleinern und sogar gleich markieren (zum kopieren) kann.

Wirkt im ersten Moment umständlich, ist aber eigentlich flott bedienbar. :)
Marcus

PS Auch Jürgens Beitrag (natürlich nur den Quellcode) mal in einen Code-Abschnitt gepackt.

Verfasst: 05.06.2013, 06:59
von MarcP
Ach dafür sind die Dreiecke da. Ich dachte immer das währ nen Styling Element :D

Ich bin halt von den üblichen Programmierforen ausgegangen. Da ist natürlich immer alles ausgeklappt da man sonnst irre werden würde beim lesen.
Wieder was gelernt

Edit:
neue Version ist hochgeladen.
Auslesefehler ist jetzt behoben. Bemerkungen und Quellenangaben werden jetzt auch ausgelesen. Aber noch nirgendswo verwendet
Plugin: AB Positiv

Verfasst: 05.06.2013, 11:18
von eberhard.grass
Hallo Marc,

erst einmal danke für das Plugin. :up:
Beim Testen ist mir aufgefallen, dass bei der Konstellation „Großmutter und Großvater sind Cousine und Cousin“ (ist ja erlaubt) die Vorfahren des Probanden bzw. bei Verwandt die gemeinsamen Vorfahren doppelt gezählt und aufgelistet werden (hierzu siehe Anlagen).

Gruß Eberhard

Edit:
- Die Beispiel-Datei sende ich Dir als PN.
- Die Daten und Namen der Beispiel-Datei sind alle fiktiv.

Verfasst: 05.06.2013, 12:09
von MarcP
Das ist noch das Problem mit den, ich sag mal, "zusammengewachsenen Ästen"
Diese Knotenpunkte werden ja statt einmal, zweimal von unten angefahren und demnach sind alle Personen über diesem Knoten auch zweimal aufgeführt.

Kurz. Bevor ich anfange da Filter o.Ä. zu bauen mache ich eine neue Einlesefunktion welche mit Sicherheit etwas langsamer ist aber dafür universeller. Dauert aber noch.
Das Vergleichsmatterial kann ich später aber gut brauchen um zu testen.

Verfasst: 06.06.2013, 10:49
von souris47
Hallo Marc,
auch von mir herzlichen Dank für das Plugin. Ich habe auch noch wenige Verbesserungen anzumerken:
Unter "Daten" denke ich, dass das Wort "Taufzeugen" geändert werden sollte in "Taufpaten", denn ich habe die Erfahrung gemacht, dass die Paten nicht immer bei der Taufe anwesend waren, aber z.B. eine Hebamme usw. und die steht ja nicht im Kirchenbuch, aber die Paten.
Weiterhin steht unter dem Dropdown "Datei" das Wort "schliessen". Dort muss aber an Stelle des ss ein ß stehen.
Unter "Extras, Optionen" steht Geburt/Tot, bei Tot muss am Ende an Stelle des "t" ein "d" eingefügt werden.
Sind zwar nur Kleinigkeiten, also nichts für ungut.
Gruß souris47

Verfasst: 06.06.2013, 11:29
von MarcP
Danke.
Habe es gleich geändert.

Verfasst: 07.06.2013, 09:07
von Jürgen T.
Hallo Marc,

hab lange drüber nachgedacht.
Ich finde den Namen Deines Plugins nicht aussagekräftig genug. Was hälst Du davon, "AB Positiv" in z. B. "Verwandschaft/gemeinsamer Vorfahr" oder so ähnlich umzubenennen?