Hallo Community, ich möchte in der Programiersprache "C" ein Array welches ich einlese in mehrere kleine Array's aufteilen. Jedoch gibt es dabei Teile die ich auch gar nicht brauche. Zur Verdeutlichung: Ich lese folgendes Array ein: 0.123456 1 99 xx d 8 01 02 03 04 05 06 07 08 Length Und ich muss daraus 4 kleine Array's bauen: Array1: 0.123456 Array2: 99 Array3: 8 Array4: 01 02 03 04 05 06 07 08 Da ich blutiger Anfänger bin, nehmt bitte etwas Rücksicht ;-) Ich habe absolut keine Ahnung wie ich das Umsetzen kann. Vielen Dank, Jim
Hallo Jim, du solltest genauer spezifizieren was du genau aus dem Array benötigst. Generell ist es vielleicht schon mal eine gute Idee den eingelesenen String anhand der Leerzeichen zu separieren. Schau dir dafür mal die Funktion "strchr" genauer an. Gruß Dennis P.S.: Generell wäre auch eine wichtige Information, ob der Quellstring immer das gleiche Format hat oder nicht.
:
Bearbeitet durch User
Jim Street schrieb: > Ich lese folgendes Array ein: > > 0.123456 1 99 xx d 8 01 02 03 04 05 06 07 08 Length Bist Du Dir sicher? welchen Datentyp hat das array? Der Rest sieht ja nach char oder int aus, aber 0.123456?? das ist ein float. der kann nicht mit einem int oder char im selben array stehen. Oder ist das gar im ASCII-Format? dann musst Du ggf die Werte noch in die entsprechenden Datentypen deiner Ziel-Arrays umwandeln. Ich bin mir sicher, dass du nicht mit Texten, sondern mit Werten weiterarbeiten möchtest
Vielen Dank erstmal für die schnellen Antworten. Also ich habe mich vielleicht etwas falsch ausgedrückt. Ich weiß noch gar ned als was oder wie ich das einlesen kann. Aber ich muss mehrere Zeilen aus einem Textdokument einlesen, die alle gleich aufgebaut sind. Und zwar so (auch mit den Leerzeichen): 0.123456 1 99 xx d 8 01 02 03 04 05 06 07 08 Length Und ich muss daraus jeweils 4 kleine Array's bauen: Array1: 0.123456 (ist ein Zeitstempel float) Array2: 99 (ist eine Zahl) Array3: 8 (ist eine Zahlt) Array4: 01 02 03 04 05 06 07 08 (sind 8 Zahlenpaare) Dankeschön
Okay, das vereinfacht die Sache: scanf [1] sollte dich ans Ziel führen! Versuch erstmal eine Zeile einzulesen. Anschließend verpackst du das in eine Schleife bis die letzte Zeile erreicht ist. Gegebenenfalls musst du den Speicher für deine Zielarrays dynamisch allozieren (malloc [2]). Jetzt bist du dran: mach einen ersten Entwurf, dann hilft hier bestimmt jemand weiter. :-) Gruß Dennis [1]: http://www.cplusplus.com/reference/cstdio/sscanf/ [2]: http://www.cplusplus.com/reference/cstdlib/malloc/
:
Bearbeitet durch User
Stehen die Zeichen immer an der gleichen Stelle in der Zeile? Also so: 0.123456 1 99 xx d 8 01 02 03 04 05 06 07 08 Length 0.123456 1 99 xx d 8 01 02 03 04 05 06 07 08 Length 0.123456 1 99 xx d 8 01 02 03 04 05 06 07 08 Length 0.123456 1 99 xx d 8 01 02 03 04 05 06 07 08 Length Dann ist es kinderleicht. Gruß Jonas
So ungefähr, mehr verrat ich mal noch nicht Ermittle Anzahl der zeilen in der Datei Initalisiere Array of structs mit ermittelter Anzahl Für jede eingelesene Zeile extrahiere Float von Stelle 0-8 und schreibe in Array extrahiere int von stelle 14-15 und schreibe in Array ... feddisch
Ungetestet und ohne fehlerbehandlung mit bösen gotos:
1 | #include<stdio.h> |
2 | |
3 | struct werte_t { |
4 | float a; |
5 | int b,c,d[8]; |
6 | };
|
7 | |
8 | void getWerte(const char* file, werte_t** werte, int* size){ |
9 | werte_t w; |
10 | FILE* f = fopen(f); |
11 | parser: { |
12 | fscanf(f,"%f 1 %d xx d %d %d %d %d %d %d %d %d %d Length\n", &w.a,&w.b,&w.c,w.d,w.d+1,w.d+2,w.d+3,w.d+4,w.d+5,w.d+6,w.d+7); |
13 | if(feof(f))goto end; |
14 | *werte = (werte_t*)realloc(*werte,++(*size)*sizeof(werte_t)); |
15 | (*werte)[(*size)-1] = w; |
16 | goto parser; |
17 | }
|
18 | end: fclose(f); |
19 | }
|
20 | |
21 | int main(){ |
22 | int werteSize=0; |
23 | werte_t* werte=0x0; |
24 | getWerte("file.txt", &werte, &werteSize); |
25 | |
26 | // werte hier verwenden
|
27 | |
28 | if(werte) free(werte); |
29 | }
|
:
Bearbeitet durch User
Kinderleicht :-D Ich möchte nochmal kurz erwähnen: Ich bin absoluter Anfänger im Programmieren und bringe es mir selber bei. Also ja, die Zeichen stehen immer an der gleichen Stelle. Magst du mir bitte verraten wie ich: Die Anzahl der Zeilen in der Datei ermittel Ein Array of structs mit ermittelter Anzahl initialisiere Und vor allem, wie ich etwas extrahiere und in ein Array schreibe Das wäre echt top, dann könnte ich das versuchen nachzuvollziehen und der heutige Tag hätte sich doch gelohnt.
Jim Street schrieb: > Kinderleicht :-D > > Ich möchte nochmal kurz erwähnen: > Ich bin absoluter Anfänger im Programmieren und bringe es mir selber > bei. Dann solltest du dir ein Buch besorgen. In jedem noch so grindigem Buch gibt es einen großen Abschnitt über Dateibehandlung. Der fängt so ungefähr in der Mitte des Buches an. Alles was davor im Buch steht ist so ziemlich unabdingbares Vorwissen, das man beherrschen sollte, wenn man zu Arbeiten mit Dateien kommt. Es bringt daher nichts, ohne dieses Wissen in der Mitte des Buches anzufagen. Und es bringt schon gar nichts, ohne Buch anzufangen. Denn dann weißt du gar nicht, was du eigentlich schon alles können solltest, um mit Dateien arbeiten zu können.
Jim Street schrieb: > Kinderleicht :-D Zumindest nur eine Variation von typischen Einsteigeraufgaben (Zähle Zeilen / Wörter, ...) > Das wäre echt top, dann könnte ich das versuchen nachzuvollziehen und > der heutige Tag hätte sich doch gelohnt. Man kann programmieren nicht nur durch Sourcecodes und ansehen und nachvolziehen erlernen! Du brauchst ein Buch mit Übungen die du selber machst! Gruß Dennis Edit: Ach, der Karl Heinz wieder... tippt schneller als andere denken können! :-D
:
Bearbeitet durch User
Im übrigen: Das hatten wir doch vor ein paar Tagen schon mal? genau. Hier: Beitrag "Frage zu "C" Array Aufteilung" Da hab ich dir vorgekaut, wie du aus einer Textdatei zeilenweise einlesen kannst. Wie ich hinzufügen möchte, absolut triviale Aufgabe. Und jetzt steckst dau fest, wie du eine einzelne Zeile in Teile zerlegen kannst? Ehrlich: du brauchst Literatur! Das sind bis jetzt absolut einfache Dinge. Da ist noch nichts irgendwie Schwieriges in der Aufgabenstellung. Einen Text in Einzelteile zu zerlegen (sscanf) lernt man in jedem Buch im ersten Drittel. Du kannst das ruhig glauben. Ohne Buch, mit dem du systematisch lernst, kommst du nicht weit. Programmieren ist nun mal eine der anspruchsvollsten Tätigkeiten, gleich nach Herztransplantation. Das lernt man nicht zwischen Tür und Angel.
[ironie on] Ach quatsch doch nicht karl-heinz, bald brauchst du nicht mehr proggen lernen sondern labberst einfach dein dünnes und der rechne baut daraus ein funktionierendes Programm http://www.heise.de/newsticker/meldung/KIT-Forscher-entwickeln-Tool-fuer-natuerlichsprachige-Programmierung-2412607.html [ironie off] Haha, kauf dir ein Buch
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.