[GELÖST] - vCard in Datenbank importieren

Anfängerfragen zum Programmieren mit PureBasic.
Micro
Beiträge: 59
Registriert: 28.12.2006 17:44
Computerausstattung: Intel 10850K, 16GB RAM
div. andere Rechner...
Wohnort: Nordkirchen

[GELÖST] - vCard in Datenbank importieren

Beitrag von Micro »

Hallo Leute,

ich möchte gerne eine vCard-Datei in eine Access-Datenbank importieren. Das Problem mit UTF-8 habe ich schon gelöst.
Mein Problem ist, das manche Zeilen nicht in jeder vCard vorhanden sind. Hier ein Beispiel:

Code: Alles auswählen

BEGIN:VCARD
VERSION:2.1
N:Nachname;Vorname
TEL;HOME:000000
TEL;WORK:111111
TEL;CELL:111111
EMAIL:mail@domain.loc
BDAY:2013-08-25T11:00
END:VCARD

BEGIN:VCARD
VERSION:2.1
N:Nachname;
TEL;HOME:333333
END:VCARD
Nun stehe ich auf dem Schlauch, wie ich das differenzieren kann, siehe Zeile "TEL;CELL".
Wer kann mir da helfen?


Gruß aus Dortmund

Frank
Zuletzt geändert von Micro am 19.09.2012 00:37, insgesamt 1-mal geändert.
PB 5.73 LTS - Win 11 Pro / 64Bit
jamirokwai
Beiträge: 65
Registriert: 02.06.2008 16:10

Re: vCard in Datenbank importieren

Beitrag von jamirokwai »

Hi,

Beispiel TEL;HOME:000000

Ich würde:
1. die Zeile mit FindString "interpretieren", und nach TEL; durchsuchen.
2. mit StringField HOME und 000000 trennen
3. den ersten Teil interpretieren und entsprechend den zweiten Teil in HOME oder WORK oder so speichern

Das geht am Besten in einer Struktur, die alle Daten enthält, und die du für neue vCards leerst.
Beim Wegspeichern übergibst du dann alle Daten an die Datenbank.

Klar soweit? :-)

Gruß
Jamirokwai
Micro
Beiträge: 59
Registriert: 28.12.2006 17:44
Computerausstattung: Intel 10850K, 16GB RAM
div. andere Rechner...
Wohnort: Nordkirchen

Re: vCard in Datenbank importieren

Beitrag von Micro »

Tach auch,
jamirokwai hat geschrieben:Das geht am Besten in einer Struktur, die alle Daten enthält, und die du für neue vCards leerst.
Beim Wegspeichern übergibst du dann alle Daten an die Datenbank.
dummerweise spuckt das Telefon die vCard nur in dieser Form aus. Ich muss ja die vorhandene vCard in das neue Programm importieren, damit es weiterverarbeitet werden kann.

Mein Problem ist nun, dass wenn eine Zeile 'nicht' vorhanden ist, diese trotzdem mit einem leeren String zu übergeben. Die vorhandenen Zeilen habe ich ja auch genauso ausgelesen, wie Du vorgeschlagen hast.
Anhand der o.g. vCard sollte das Ergebnis so aussehen:

Code: Alles auswählen

('Nachname', 'Vorname', '000000', '111111', '111111', 'mail@domain.loc', '2013-08-24T11:00*'),
('Nachname', '', '333333', '', '', '', '')
Leider sieht es aber so aus:

Code: Alles auswählen

('Nachname', 'Vorname', '000000', '111111', '111111', 'mail@domain.loc', '2013-08-24T11:00*'),
('Nachname', '', '333333',
Der Rest ist einfach nicht mehr da!

Gruß Frank
PB 5.73 LTS - Win 11 Pro / 64Bit
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: vCard in Datenbank importieren

Beitrag von Bisonte »

jamiro meint es wohl auf diese Weise :

Code: Alles auswählen

Structure struct_vCard
  
  Version.s
  Nachname.s
  Vorname.s
  TelHome.s
  TelWork.s
  TelCell.s
  Email.s
  BDay.s
  
EndStructure

NewList vCardData.s() ; die gerade eingelesene vCard
NewList vCardSQL.struct_vCard() ; Die nach SQL zu portierende vCard

; Die Erste vCard

; AddElement(vCardData()) : vCardData() = ""
; AddElement(vCardData()) : vCardData() = "BEGIN:VCARD"
; AddElement(vCardData()) : vCardData() = "VERSION:2.1"
; AddElement(vCardData()) : vCardData() = "N:Nachname;Vorname"
; AddElement(vCardData()) : vCardData() = "TEL;HOME:000000"
; AddElement(vCardData()) : vCardData() = "TEL;WORK:111111"
; AddElement(vCardData()) : vCardData() = "TEL;CELL:111111"
; AddElement(vCardData()) : vCardData() = "EMAIL:mail@domain.loc"
; AddElement(vCardData()) : vCardData() = "BDAY:2013-08-25T11:00"
; AddElement(vCardData()) : vCardData() = "End:VCARD"

; die zweite

AddElement(vCardData()) : vCardData() = "BEGIN:VCARD"
AddElement(vCardData()) : vCardData() = "VERSION:2.1"
AddElement(vCardData()) : vCardData() = "N:Nachname;"
AddElement(vCardData()) : vCardData() = "TEL;HOME:333333"
AddElement(vCardData()) : vCardData() = "End:VCARD"

; Megasimple Stringoperationen

ClearList(vCardSQL())

AddElement(vCardSQL())
ForEach vCardData()
  
  Dat.s = StringField(vCardData(), 1, ":")
  Com.s = Mid(vCardData(), FindString(vCardData(),":")+1)
  
  Select Dat
    Case "N"
      vCardSQL()\Nachname = StringField(Com,1,";")
      vCardSQL()\Vorname  = StringField(Com,2,";")
    Case "TEL;HOME"
      vCardSQL()\TelHome = Com
    Case "TEL;WORK"
      vCardSQL()\TelWork = Com
    Case "TEL;CELL"
      vCardSQL()\TelCell = Com
    Case "EMAIL"
      vCardSQL()\Email = Com
    Case "BDAY"
      vCardSQL()\BDay = Com
  EndSelect
  
Next
tr.s = Chr(96) ; MySql "Gänsefuss"

SQL.s = "("+tr+vCardSQL()\Nachname+tr+", "+tr+vCardSQL()\Vorname+tr+", "
SQL   + tr + vCardSQL()\TelHome + tr + ", "
SQL   + tr + vCardSQL()\TelWork + tr + ", "
SQL   + tr + vCardSQL()\TelCell + tr + ", "
SQL   + tr + vCardSQL()\Email + tr + ", "
SQL   + tr + vCardSQL()\BDay + tr + ")"
Debug SQL
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Micro
Beiträge: 59
Registriert: 28.12.2006 17:44
Computerausstattung: Intel 10850K, 16GB RAM
div. andere Rechner...
Wohnort: Nordkirchen

[GELÖST] vCard in Datenbank importieren

Beitrag von Micro »

Tach zusammmen,

jetzt habe ich es kapiert. Mann, ich dachte nicht mehr an den Befehl "NewList", obwohl das ja naheliegend ist.
Martin, ich habe Dein Quellcode übernommen und in eine Schleife untergebracht. Jetzt laufen alle vCards nacheinander durch und werden entsprechend in die Tabelle eingetragen. Sooo wollte ich das haben :-)

Zwei Informationen dazu noch: Man(n) sollte nach den ersten Schreifendurchlauf einen "ClearList(vCardData())" einfügen. Zudem braucht der "FindString"-Befehl einen 3. Parameter. Eine "0" ist da sehr hilfreich :-)

Ich danke Euch beide recht herzlich für Eure Hilfe. Alleine wäre ich da nicht drauf gekommen!


Viele Grüße aus Dortmund

Frank
PB 5.73 LTS - Win 11 Pro / 64Bit
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: [GELÖST] vCard in Datenbank importieren

Beitrag von Kiffi »

<OT>
Micro hat geschrieben:Zudem braucht der "FindString"-Befehl einen 3. Parameter.
bei Dir. Bei uns nicht mehr. ;-)

</OT>
a²+b²=mc²
Micro
Beiträge: 59
Registriert: 28.12.2006 17:44
Computerausstattung: Intel 10850K, 16GB RAM
div. andere Rechner...
Wohnort: Nordkirchen

Re: [GELÖST] - vCard in Datenbank importieren

Beitrag von Micro »

Sry, hatte meine Sig noch nicht aktualisiert. :oops:
Ich nutze auch die 4.61, aber in der Help stand nicht explizit, das der Startposition Parameter optional ist :praise:


Gruß aus Dortmund,

Frank
PB 5.73 LTS - Win 11 Pro / 64Bit
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: [GELÖST] - vCard in Datenbank importieren

Beitrag von Danilo »

Micro hat geschrieben:Ich nutze auch die 4.61, aber in der Help stand nicht explizit, das der Startposition Parameter optional ist :praise:
In der englischen Version steht es:
FindString()

Syntax

Position = FindString(String$, StringToFind$ [, StartPosition])

Description

Try to find the 'StringToFind$' within the given 'String$' starting from the given 'StartPosition'.
If 'StartPosition' is not specified, the default is 1.
If the string is found, its position is returned (in its offset, starting from 1). If the string is not found, it returns 0.

Code: Alles auswählen

  Debug FindString("PureBasic", "Bas", 1) ; will display 5
Supported OS

All
In der deutschen Hilfe steht es wirklich nicht. Da muss André wohl nachbessern,
wenn die deutsche Hilfe so hinterher hinkt.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Micro
Beiträge: 59
Registriert: 28.12.2006 17:44
Computerausstattung: Intel 10850K, 16GB RAM
div. andere Rechner...
Wohnort: Nordkirchen

Re: [GELÖST] - vCard in Datenbank importieren

Beitrag von Micro »

Moin,
In der deutschen Hilfe steht es wirklich nicht. Da muss André wohl nachbessern,
wenn die deutsche Hilfe so hinterher hinkt.
Hmmm, da ich ja diesbezüglich mir ein wenig leicht mache, lese ich in der Tat immer nur die deutsche Hilfe.
Ich muss auch mal nachsehen, was sich sonst noch alles getan hat. Ich denke mir, dass ich mir das bestimmt dann leichter machen kann :mrgreen:

Gruß Frank
PB 5.73 LTS - Win 11 Pro / 64Bit
Antworten