In excel (oä) suchen.

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
gillian_x
Beiträge: 30
Registriert: Sa 22. Nov 2014, 14:24

In excel (oä) suchen.

Beitrag von gillian_x »

Liebe Forumsmitglieder,

ich befasse mich erst seit kurzem mit Lazarus und bin nun auf ein Problem gestossen, dass ich bisher (auch mangels nötiger Kenntnisse dieser Programmiersprache) nicht lösen konnte :|

Ich möchte ein Programm schreiben, in das der Benutzer eine Postleitzahl eingeben kann und das daraufhin die dazugehörige Klimazone ausspuckt.
Eine Liste in excel mit sämtlichen PLZ und den dazugehörigen Klimazonen existiert bereits.

Nun bin ich bisher soweit gekommen, dass es möglich ist eine PLZ einzugeben und diese auch als eine Integer Variable gespeichert wird.

Nun meine Frage: Wie sage ich dem Programm, dass es die Excel Tabelle (Libre wäre auch möglich) öffnen soll, die PLZ dort finden soll und die dazugehörige Klimazone zurückgeben soll? Ist sowas möglich? Ist es schwer oder einfach umzusetzen?

Finde ich da irgendwo Informationen zu? Habe bisher in Delphi Büchern gelesen, aber nicht wirklich das gefunden was ich suche :(

Bin für jede Hilfe dankbar! :)

LG

soerensen3
Beiträge: 104
Registriert: Fr 22. Jun 2012, 01:51
OS, Lazarus, FPC: Fedora-Linux 23 (Korora) Lazarus 1.6 FPC 3.0
CPU-Target: 64Bit
Wohnort: Bonn

Re: In excel (oä) suchen.

Beitrag von soerensen3 »

Hallo gilian_x,

Hast du das auch schon im Internet gesucht? Lazarus hat sich in den letzten Jahren sehr viel weiter entwickelt, weshalb ich glaube, dass man nicht viel in Büchern zu dem Thema findet (Oder doch?).

Hier ist ein möglicher Weg beschrieben.
http://wiki.lazarus.freepascal.org/Office_Automation

Ob es schwer ist, hängt stark davon ab wie sehr du dich allgemein mit Programmiersprachen auskennst. Ich würde die genannte Quelle eher als Fortgeschritten einschätzen, vielleicht gibt es aber auch noch andere Möglichkeiten, die einfacher sind.

Allgemein ist die Frage ob Excel hier der beste Weg ist, oder ob man ncht lieber in deinem Fall ein Zwischenformat verwendet.

gillian_x
Beiträge: 30
Registriert: Sa 22. Nov 2014, 14:24

Re: In excel (oä) suchen.

Beitrag von gillian_x »

Hi soerensen3 ,

Danke für die Antwort erstmal. Ich werde mir den Link einmal anschauen.
Habe bisher nur C programmiert.

Excel ist kein muss, gibt es eine bessere alternative?

LG

soerensen3
Beiträge: 104
Registriert: Fr 22. Jun 2012, 01:51
OS, Lazarus, FPC: Fedora-Linux 23 (Korora) Lazarus 1.6 FPC 3.0
CPU-Target: 64Bit
Wohnort: Bonn

Re: In excel (oä) suchen.

Beitrag von soerensen3 »

Das hängt von der Komplexität von deinem Programm ab. Wenn du wirklich nur 2 Wertpaare hast, ginge eine Ini Datei (wobei der Nachteil ist, dass excel die meines Wissens nicht erstellen kann), oder eine csv Datei in Kombination mit einer StringList (Guck dir mal die Klasse TStringList an).

Code: Alles auswählen

[data]
Postleitzahl = "die Klimazone"


Ansonsten ist Lazarus sehr weit entwickelt was Datenbanken angeht. Man könnte eine SQL Datenbank einrichten. Je nach Problemstellung könnte das aber auch ein bischen übertrieben sein. Diese Lösung würde ich nur wählen wenn du dich mit Datenbanken ein bischen auskennst, da du sonst zwei Sachen lernen musst, Pascal und MySQL.

An deiner Stelle würde ich mich mal mit dem Verarbeiten von csv unter Lazarus auseinandersetzen. Dazu solltest du bestimmt etwas finden.

Es gibt aber bestimmt viele Möglichkeiten das Programm umzusetzen, weiß jetzt nicht was davon die einfachste ist, wenn man neu ist im Umgang mit Lazarus/FPC.

gillian_x
Beiträge: 30
Registriert: Sa 22. Nov 2014, 14:24

Re: In excel (oä) suchen.

Beitrag von gillian_x »

Folgenden einfall hatte ich jetzt:

ich lasse die Daten aus excel in ein stringgrid schreiben und durchsuche dieses dann, zB mit einer while schleife ???
Also vergleiche solange den wert der variable x (die eingegebene PLZ) mit den Werten der ersten spalte, bis diese übereinstimmen und schreibe dann den dazugehörigen wert aus der zweite spalten in ein edit Feld?

wäre das so in etwa möglich?

LG

soerensen3
Beiträge: 104
Registriert: Fr 22. Jun 2012, 01:51
OS, Lazarus, FPC: Fedora-Linux 23 (Korora) Lazarus 1.6 FPC 3.0
CPU-Target: 64Bit
Wohnort: Bonn

Re: In excel (oä) suchen.

Beitrag von soerensen3 »

Hab mir die Seite nochmal angeguckt, das sieht gar nicht so kompliziert aus und das was du beschreibst ist wohl die übliche Vorgehensweise. Mal abgesehen, dass du nicht den Umweg über ein Stringgrid gehen musst. Wenn du Glück hast gibt es dazu sogar eine Suchfunktion. Lies dir doch dazu mal die Referenz durch (Falls es eine gibt).

http://wiki.lazarus.freepascal.org/Office_Automation hat geschrieben:Playing around with cells is simple too:

Code: Alles auswählen

 
  // adding a value
  aCell := ExcelSheet.Cells(1, 1) ;
  aCell.Value := 10;
 



Probier doch einfach für den Anfang mal die Beispiele durch, dann wirst du sehen ob du damit zurecht kommst.

Gruß Johannes

Linkat
Lazarusforum e. V.
Beiträge: 530
Registriert: So 10. Sep 2006, 23:24
OS, Lazarus, FPC: Linux Mint 21.3; Lazarus 3.0 FPC 3.2.2; RaspiOS
CPU-Target: AMD 64, ARM 32
Wohnort: nr Stuttgart

Re: In excel (oä) suchen.

Beitrag von Linkat »

Hallo gillian_x,
zunächst ein herzliches Willkommen im Lazarusforum.

Ich denke am geschicktesten ist, wenn du deine Liste aus Excel als csv-File abspeicherst.
Mit einer StringList kannst du die Datei laden:

Code: Alles auswählen

stringlist.LoadFromFile('pfad\datei');


dann kannst du in einer Schleife die Daten zeilenweise untersuchen:

Code: Alles auswählen

s:=stringlist.Strings[i];


In der Zeile s kannst du dann die PLZ mit der Klimazone suchen:

Code: Alles auswählen

splz:=ExtractDelimited(3,s,[';']);


Wobei hier die PLZ an dritter Stelle stehen würde.

Du musst dich halt schon einlesen. z.B. http://wiki.freepascal.org/Stringlist/de

Viel Erfolg beim Programmieren.
Wenn du Hilfe brauchst, kannst du dich gerne wieder melden.

Gruß, linkat
Linux Mint 21; Lazarus 2.2.4 FPC 3.2.2; RaspiOS

wp_xyz
Beiträge: 4892
Registriert: Fr 8. Apr 2011, 09:01

Re: In excel (oä) suchen.

Beitrag von wp_xyz »

Oder nimm FPSpreadsheet, damit musst du nicht den Umweg über eine Hilfsdatei gehen, sondern kannst die Excel- oder OpenOffice-Datei direkt mit Lazarus lesen und durchsuchen: http://wiki.lazarus.freepascal.org/FPSpreadsheet

gillian_x
Beiträge: 30
Registriert: Sa 22. Nov 2014, 14:24

Re: In excel (oä) suchen.

Beitrag von gillian_x »

Vielen Dank für eure Hilfe erstmal!

Ich habe es eigentlich hinbekommen, nur habe ich zum testen in excel eine Tabelle mit 2 Spalten und den Zahlen von 1-6 genommen. Hat alles wunderbar funktioniert! :)

Aber wenn ich die richtige excel Tabelle mit den über 59.000 PLZ verwende bekomme ich nachdem eintippen der PLZ eine Fehlermeldung! :cry:

Ist Stringgrid da irgendwie begrenzt, muss ich da was einstellen? Habe RowCount auf 60.000 gestellt.

LG

gillian_x
Beiträge: 30
Registriert: Sa 22. Nov 2014, 14:24

Re: In excel (oä) suchen.

Beitrag von gillian_x »

Und noch eine Fehler den ich gefunden habe.

Ich möchte ja die Klimazone ausgegeben haben, die würde ja in der zweiten Spalte stehen und dann in ein Label geschrieben werden.

Wie mach ich das?

Also: Label1.Caption := .... ?

Und zu der vorherigen Frage, ich glaube da ist der Fehler schon beim einlesen passiert! :D womöglich komme ich da nochmal drauf zurück, gucke erstmal ob ich das behoben bekommen :lol:

LG

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: In excel (oä) suchen.

Beitrag von Socke »

gillian_x hat geschrieben:Nun bin ich bisher soweit gekommen, dass es möglich ist eine PLZ einzugeben und diese auch als eine Integer Variable gespeichert wird.

Hast du schon einmal Post in die Postleitzone 0 versendet? Bei Integer wird es schwer, die Postleitzahlen 02345 und 2345 zu unterscheiden.

Ich empfehle: 10 Stellen alphanumerische Zeichen zulassen und ggf. auf Landesebene einzuschränken (vgl. https://de.wikipedia.org/wiki/Liste_der_Postleitsysteme)
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

gillian_x
Beiträge: 30
Registriert: Sa 22. Nov 2014, 14:24

Re: In excel (oä) suchen.

Beitrag von gillian_x »

Sorry, hatte sich erledigt. Einfach mal byte in word geändert und es funktioniert :)


Hi,

bin leider die ganze Woche nicht dazu gekommen an dem Programm weiter zu arbeiten.

Vielleicht kann mir nochmal jemand helfen! :?:

Ich möchte nun die excel datei in ein stringgrid schreiben, das funktioniert eig auch. Nur denke ich das die Anzahl der Zeilen Probleme macht. :?

Ich habe zwei Spalten (PLZ und Klimazone) und 59215 Zeilen.

Ich habe im Stringgrid eingestellt ColCount 4 und RowCount 60000 und erhalte folgende Fehlermeldung:

Error: range check error while evaluating constants

Wenn ich beispielsweise nur 100 Zeilen einlesen lasse, funktioniert es ohne Probleme.

Woran kann das liegen? :(

LG

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2641
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: In excel (oä) suchen.

Beitrag von m.fuchs »

gillian_x hat geschrieben:Woran kann das liegen? :(

Vermutlich daran, dass etwas falsch ist.

Mehr kann man dir ohne weiteren Informationen von deiner Seite, nicht sagen. Wie sieht der Quellcode aus, in dem der Fehler auftritt?
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

gillian_x
Beiträge: 30
Registriert: Sa 22. Nov 2014, 14:24

Re: In excel (oä) suchen.

Beitrag von gillian_x »

Hallo m.fuchs,

ich habe den Fehler schon gefunden! :) musste nur byte in word ändern bei der variablen Deklaration! :)

Nun möchte ich aber einen Wert aus einer Zelle meines Stringgrids in ein Label schreiben.

Also "Label1.Caption:= .... "

Ich weiß nicht wie ich das machen soll und finde auch nichts bisher :cry:

ich muss ihm ja iwie mitteilen in welcher Zeile und spalte der Wert steht und ist das so überhaupt möglich??

LG

Benutzeravatar
theo
Beiträge: 10498
Registriert: Mo 11. Sep 2006, 19:01

Re: In excel (oä) suchen.

Beitrag von theo »

Das schon gelesen?

http://wiki.freepascal.org/Grids_Refere ... gsbeispiel

Wie bei Punkt 4 einfach umgekehrt (auslesen statt hineinschreiben).

Antworten