Webmaster Forum Logo Part 1 Webmaster Forum Logo Part 2
Webmaster Forum Logo Part 3
     
 
  :: Anmeldung

Benutzername:

Registrierung...

Passwort:

Passwort vergessen?

angemeldet bleiben


  
  :: Umfrage
Welche sozialen Netzwerke benutzt du regelmäßig?

 Facebook
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 73%
 keines
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 22%
 Google+
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 19%
 Twitter
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 11%
 Xing
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 6%
 schülerVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 6%
 meinVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 studiVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 MySpace
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%
 LinkedIn
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%

 ges. 393 Stimmen
 
  :: Buttons

Valid XHTML 1.0 Transitional

nocturne

Kaiser

Dabei seit: 06.01.2005

Beiträge: 1 167

 

1 Zum Seitenanfang

Samstag, 14. August 2010, 19:00

Suche programmiersprache

Hi, ich suche eine Programmiersprache für individuelle Datensätze.

Die erfahrenen kennen das Problem:
Was, wenn die Datensätze einer Datei unterschiedlich groß sind!

Konkret geht es um zip-dateien:

Ihr seht das "file name" eine variable Größe hat. Diese wird durch "file name len" definiert.
Jetzt will ich das einlesen!
In delphi wollte ich follgendes schreiben:

cfh=record
signature:longword;
version:word;
vers_need,flags,compression:word;
modTime:time;
modDate:date;
crc32,compSize,uncompSize:longword;
fnLen,xtraLen,fcomLen,startAt,intAttr:word;
externAtt, localOffset:longword;
fn:array[1..fnLen] of char; <<<<<<Hier meckert der compiler
xtra:array[1..xtraLen] of byte; <<<<<<Hier meckert der compiler
fcom:array[1..fcomLen] of char; <<<<<<Hier meckert der compiler
end;

Ich suche jetzt eine Sprache die das hinkricht, möglichst rechenschnell.
Jemand eine Idee?
 

Dasart

Eroberer

Dabei seit: 08.08.2010

Beiträge: 59

 

2 Zum Seitenanfang

Samstag, 14. August 2010, 19:15

klar C++, C, C# kriegen das alle hin.

Ich kenn mich zwar in Delphi nicht aus, aber wäre es nicht erstmal einfach sicherzustellen, ob es vllt doch in Delphi funktioniert (Delphi Community) ehe du das in einer anderen Sprache umsetzt ?

Oder bist du dir 100% sicher das es für dein Problem keine Delphi Lösung gib ?
Unsere Welt ist einfach Krank. Aber ich mag sie irgendwie.
 

nocturne

Kaiser

Dabei seit: 06.01.2005

Beiträge: 1 167

 

3 Zum Seitenanfang

Samstag, 14. August 2010, 19:33

jaha ich habs mit c, c++ c# probiert!
es müste eine datenstruktur sein die kein union erlaubt. und das geht bei denen überall.



ich glaube du hast mein anliegen nicht verstanden.
in c++ müsste das doch so aussehen:

Zitat

struct test{
int a;
int b[a];
}

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »nocturne« (14. August 2010, 19:33)

 

eMKay

Eroberer

Dabei seit: 19.07.2009

Beiträge: 52

 

4 Zum Seitenanfang

Samstag, 14. August 2010, 21:39

Moin!

Naja, so kann das auch nich gehen, dafür musst Du den Speicher zur Laufzeit anfordern.

In C++ etwa so:

C/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <iostream>

using namespace std;

class test
{
public:
    	int a; // das ist die Länge
    	int *b; // ein Zeiger auf int

    	test():a(10), b(NULL) // Konstruktor ohne Längenangabe, wir setzen Länge auf 10...
    	{
     	b=new int[a]; // Erzeugen des Int-Arrays b mit Länge a zur Laufzeit !!!
     	    	if(!b) a=0; // wenns nich geklappt hat, setzen wir die länge wieder auf 0
    	}

    	test(int len):a(len), b(NULL) // Konstruktor mit Längenangabe, sonst wie oben
    	{
     	   	b=new int[a];
     	    	if(!b) a=0;
    	}

    	~test() // Destruktor
    	{
     	   	delete[] b; // Freigabe des Speichers von b
     	   	b=NULL; // setzen von b auf 'null' zur Sicherheit
     	   	a=0; // setzen von a auf 0, um ordentlich zu sein
    	}
};

int main()
{
    	cout<<endl<<"Objekt t2:"<<endl;
    	test t1; // erzeugt ein test-Objekt mit a=10;
    	if(t1.a==0) cout<<"Out Of Memory..."<<endl;
    	else
    	{
     	   	cout<<"Länge: "<<t1.a<<endl<<endl;
     	   	int i;
     	   	for(i=0;i<t1.a;i++)
    	   	{
         	       	t1.b[i]=i*i;
    	}

    	   	for(i=0;i<t1.a;i++)
    	{
        	cout<<i<<" mal "<<i<<" ist "<<t1.b[i]<<endl;
    	   	}
    	}

    	cout<<endl<<"Objekt t2:"<<endl;
    	test t2(25); // erzeugt ein test-Objekt mit a=25;
    	if(t2.a==0) cout<<"Out Of Memory..."<<endl;
    	else
    	{
     	   	cout<<"Länge: "<<t2.a<<endl<<endl;
     	   	int i;
     	   	for(i=0;i<t2.a;i++)
     	   	{
         	       	t2.b[i]=i*i*i;
     	}

     	   	for(i=0;i<t2.a;i++)
     	   	{
         	       	cout<<i<<" mal "<<i<<" mal "<<i<<" ist "<<t2.b[i]<<endl;
     	   	}
 	}
 	cout<<endl<<endl<<"(Return) zum Beenden...";
    	cin.get();
    	return 0;
}


ACHTUNG :finger: , das ist kein perfekter Stil, weil die Variablen a und b offen von aussen (ausserhalb der Klasse) zugänglich sind...
wollte aber möglichst nah an Deinem Beispiel bleiben... (die Namen a und b für die Vars sind ja auch doof :D )

Früher ging sowas auch in Pascal und Delphi, ob das heut noch geht, keine Ahnung...
Zeiger sind ja in vielen (sogenannten) modernen Programmiersprachen verpönt...

(allerdings gibt es sicher auch nen weg über nen eingebauten Collection-Typ, sowas wie Vector oder Stack)

MfG, Marcus

PS.: Sorry, daß das so seltsam eingerückt ist, aber das is in dem Forum hier irdenwie ein Glücksspiel... :D

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »eMKay« (14. August 2010, 21:39)

 

wischi

Routinier

Dabei seit: 23.01.2009

Beiträge: 493

 

5 Zum Seitenanfang

Samstag, 14. August 2010, 21:50

ich versteh das eigentliche problem nicht. in allen sprachen die ich kenne gibt es die möglichkeit von dynamischen arrays und somit sollte dein problem doch gelöst sein oder?
wischipedia - http://wischenbart.org/wwa (einfach mal vorbeischaun)
 

eMKay

Eroberer

Dabei seit: 19.07.2009

Beiträge: 52

 

6 Zum Seitenanfang

Sonntag, 15. August 2010, 03:59

Hi wischi!

Exakt...

dynamisches Int-Array b mit Länge a in C++ -->

int a=10;
int *b=new int[a];
// nutzen
delete[] b;

(vielleicht war mein Beispiel oben etwas ausufernd, aber wenn ich einmal am Tippen bin... :D )

Noch schöner geht's vielleicht mit nem Vektor... der würde die Länge dann gleich mit speichern, und wäre recht einfach in der Grösse veränderbar. Und ausserdem gibts die eigentlich auch in so ziemlich jeder Sprache mittlerweile. Aber wollte halt an seinem Beispiel bleiben.

In C gibts da noch ne seltsame Schreibweise, welche fast direkt so aussieht, wie sein Beispiel oben. Die wird in der Win-Api an vielen Stellen benutzt.

struct test
{
int a; // Länge
int b[1]; // Platzhalter für b
};

aber da muss man den Speicher dann auch in C-Manier anlegen, für test und b einzeln, und ihn dann noch nullen...
...das wollt ich ihm heutzutage nich mehr antun :whistling:
(Ich hab das gehasst, wurde in den alten Bitmap-Funktionen viel benutzt...)

MfG, Marcus
 

silence

König

Dabei seit: 28.02.2003

Beiträge: 981

 

7 Zum Seitenanfang

Sonntag, 15. August 2010, 10:11

int array[x] ist in C das selbe wie int *array + x, was man also machen kann ist eine Struktur definieren, die dem Header der Datei entspricht -
z.B. also

C/C++-Quelltext

1
2
3
4
5
6
typedef struct
{
   unsigned long version;
   unsigned short version;
   ...
} zipHeader;

Anschließend castet man den Pointer zum buffer der eingelesenen file, z.B. mit

C/C++-Quelltext

1
zipHeader *pHeader = (zipHeader*)buffer;


Das deckt den Header teil ab.
Zu deinem Problem mit den variablen Einträgen: Setzt einen Zeiger auf den Anfang des Eintrages und gib deiner Struktur eine Variable für seine Länge.
Auf diesen Zeiger kannst du dann auch mit dem [] Operator zugreifen, also wie auf ein Array.
Aktuell nutze ich: Windows, Linux, MacOS X, Solaris...weil die Welt nicht nur S/W ist!
Blog

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »silence« (15. August 2010, 10:11)

 

wischi

Routinier

Dabei seit: 23.01.2009

Beiträge: 493

 

8 Zum Seitenanfang

Sonntag, 15. August 2010, 19:12

für ganz harte gibt es auch die möglichkeit wenn ihr direkt in ein struct einlesen möchtet und es sich um einzelne bits handelt: Bit Fields:

http://msdn.microsoft.com/en-us/library/ewwyfdbe(VS.80).aspx

lg wischi
wischipedia - http://wischenbart.org/wwa (einfach mal vorbeischaun)
 

nocturne

Kaiser

Dabei seit: 06.01.2005

Beiträge: 1 167

 

9 Zum Seitenanfang

Montag, 30. August 2010, 07:55

Warte, das hat jetzt geklappt wischi. Ich musste zwar einen mächtigen Macro-Preprozessor installieren, der Code sieht beknackt aus und ich kann nur noch mit Notepad arbeiten, aber es geht!

EDIT: OK und der Code ist 15x so groß.

Mit C# 5 wären Annotationen möglich, jedoch will ich auf das .net verzichten.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »nocturne« (30. August 2010, 07:55)

 

Ähnliche Themen