globale Datentypen definieren

Für Fragen von Einsteigern und Programmieranfängern...
Kieler
Beiträge: 17
Registriert: Sa 22. Mär 2014, 11:58
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Kiel

globale Datentypen definieren

Beitrag von Kieler »

Moin,

ich habe wieder ein typisches Anfängerproblem.

Ich habe in meinem Programm eine procedure geschrieben, welche csv Dateien in Array schreibt oder liest. Da ich an die procedure kein Array übergeben kann, habe ich ich einen neuen Type definiert:
type
Daten = array[1..8000,0..20] of string;

Das funktioniert auch ganz prima. Nun möchte ich diese Procedure in eine Unit auslagern, aber wie kann ich auf meinen neuen Datentyp "Daten" aus allen Units zugreifen. Ich habe schon mit public experimentiert. Klappt aber nicht.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
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: globale Datentypen definieren

Beitrag von m.fuchs »

Wo hast du diesen Typ den definiert? Das muss im Interface-Teil der Unit erfolgen. Dann können auch andere Programmteile diesen Typ nutzen.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Kieler
Beiträge: 17
Registriert: Sa 22. Mär 2014, 11:58
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Kiel

Re: globale Datentypen definieren

Beitrag von Kieler »

Im Interface von meiner neuen ausgelagerten Unit?
Das macht Sinn.

Ich habe es nicht der Hauptunit gemacht.

Kieler
Beiträge: 17
Registriert: Sa 22. Mär 2014, 11:58
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Kiel

Re: globale Datentypen definieren

Beitrag von Kieler »

Ich wollte schreiben, dass ich es in der Hauptunit gemacht habe.

Was muss ich hier im Forum angeben, damit etwas als Code angezeigt wird?

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
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: globale Datentypen definieren

Beitrag von m.fuchs »

Kieler hat geschrieben:Im Interface von meiner neuen ausgelagerten Unit?

Im Interface der Unit, die alle Programmteile einbinden in denen du diesen Typ nutzen möchtest.

Kieler hat geschrieben:Das macht Sinn.

Waaaaaaaaah.

Kieler hat geschrieben:Ich habe es in der Hauptunit gemacht.

Dann kannst du den Typen nur in der Hauptunit nutzen. Also ich gehe mal davon aus, dass keine andere Unit diese Hauptunit im uses stehen hat.

Kieler hat geschrieben:Was muss ich hier im Forum angeben, damit etwas als Code angezeigt wird?

Da gibt es ob ein Dropdown namens Highlighter. Dort Freepascal/Lazarus auswählen und schon werden passende Tags eingefügt.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Kieler
Beiträge: 17
Registriert: Sa 22. Mär 2014, 11:58
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Kiel

Re: globale Datentypen definieren

Beitrag von Kieler »

Irgendwie verstehen ich deine Antwort nicht.

Ich habe eine neue Unit CSV erstellt. Diese rufe ich in der Unit1 auf. Natürlich auch mit uses.

Ich muss meine neuen Datentyp in der Unit CSV definieren. Richtig?

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
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: globale Datentypen definieren

Beitrag von m.fuchs »

Kieler hat geschrieben:Ich habe eine neue Unit CSV erstellt. Diese rufe ich in der Unit1 auf. Natürlich auch mit uses.
Ich muss meine neuen Datentyp in der Unit CSV definieren. Richtig?

Ja.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Kieler
Beiträge: 17
Registriert: Sa 22. Mär 2014, 11:58
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Kiel

Re: globale Datentypen definieren

Beitrag von Kieler »

Vielen Dank, für die schnelle Unterstützung. Manchmal verrennt man sich alleine einfach. Gerade wenn man anfängt. Da helfen auch Bücher und Google manchmal nicht mehr.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
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: globale Datentypen definieren

Beitrag von m.fuchs »

Deswegen gibt es das Forum ja :)
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Mathias
Beiträge: 6162
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: globale Datentypen definieren

Beitrag von Mathias »

Ich denke mal, du hast einfach eine sehr grosse Array definiert, so das möglichst viele CSV-Dateien abdeckt.

Code: Alles auswählen

type
  Daten = array[1..8000,0..20] of string;

Unter Lazarus gibt es dynamische Arrays, bei denen man die Grösse erst zur Laufzeit definiert.
Das sieht dann so aus:

Code: Alles auswählen

type
Daten = array of array of string;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Kieler
Beiträge: 17
Registriert: Sa 22. Mär 2014, 11:58
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Kiel

Re: globale Datentypen definieren

Beitrag von Kieler »

Interessant. Muss ich dazu etwas in meinem Programm machen oder wird die Größe selbständig erkannt.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: globale Datentypen definieren

Beitrag von mse »

Kieler hat geschrieben:Interessant. Muss ich dazu etwas in meinem Programm machen

Ja, siehe hier:
https://www.freepascal.org/docs-html/cu ... 510003.3.1

Mathias
Beiträge: 6162
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: globale Datentypen definieren

Beitrag von Mathias »

Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Kieler
Beiträge: 17
Registriert: Sa 22. Mär 2014, 11:58
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Kiel

Re: globale Datentypen definieren

Beitrag von Kieler »

Ich bin zu blöd. Jetzt habe ich es in meiner UNIT wie folgt eingebunden:

Code: Alles auswählen

unit CSV;
 
{$mode objfpc}{$H+}
 
interface
  type
  Daten = array[1..8000,0..20] of string;
 procedure LESEN (QuellName : string; var ZielFeld : Daten; var Zeilen : Integer);
 procedure SCHREIBEN (ZielName : string; var QuellFeld : Daten; var Zeilen : Integer; var Spalten : Integer);
 
uses
  Classes, SysUtils;
 
implementation 


Lazarus bringt dann folgende Fehlermeldung : Fatal: Syntax error, "IMPLEMENTATION" expected but "USES" found

Warum?

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
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: globale Datentypen definieren

Beitrag von m.fuchs »

Pack mal den uses-Block vor den type-Block.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Antworten