Gamestudio Links
Zorro Links
Newest Posts
Data from CSV not parsed correctly
by EternallyCurious. 04/18/24 10:45
StartWeek not working as it should
by Zheka. 04/18/24 10:11
folder management functions
by VoroneTZ. 04/17/24 06:52
lookback setting performance issue
by 7th_zorro. 04/16/24 03:08
zorro 64bit command line support
by 7th_zorro. 04/15/24 09:36
Zorro FIX plugin - Experimental
by flink. 04/14/24 07:48
Zorro FIX plugin - Experimental
by flink. 04/14/24 07:46
AUM Magazine
Latest Screens
The Bible Game
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Who's Online Now
1 registered members (1 invisible), 672 guests, and 0 spiders.
Key: Admin, Global Mod, Mod
Newest Members
EternallyCurious, howardR, 11honza11, ccorrea, sakolin
19047 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Fetter ACSII Parser #468205
09/24/17 15:10
09/24/17 15:10
Joined: Jun 2010
Posts: 212
tagimbul Offline OP
Member
tagimbul  Offline OP
Member

Joined: Jun 2010
Posts: 212
hey grin
das handbuch lügt ^^ da steht man kann nur maximal 10'000 zeichen aus einer text datei parsen ^^
ich habe nun einen weg gefunden bis zu -> 5 MILLIONEN <- zu parsen ^^
man kann sicher noch mehr wenn man will.
aber zum vergleich:
der dickste harry potter band hat 1,7 miolionen zeichen

der parser ist richtig gut grin

jedoch:
man kann ihn nicht via SED starten man muss das programm puplishen damit es funktioniert.
dann werden die 5 millionen zeichnen in nur wenigen sekunden geparst

und es wird ein array in der grösse von 35'7141 erzeugt
jede zeile hat 14 zeichen + 1 zeilen umbruch
das wären 15 * 35'7141 und sind insgesamt 5'357'115 zeichen die da geparst werden
und dynamsich in arrays abgespeichert werden =)

sehr nett finde ich dass ich den zeilen umbruch als acsii zeichen nutze um zu signalisieren das es sich um einen neuen string handelt.

find ich geil ^^
das lösst mein problem bei meinem dialog system wo ich bisher auf 10'000 chars eingeschränkt war =)

villeicht kann ihn ja jemand brauchen
.rar ist im anhang
lg tom


edit: nutzt die funktion von Master032 als main.c die is ja mal ultra geil ! grin

Last edited by tagimbul; 09/25/17 12:33.

meine website mit 3dgs sachen =) //noch nicht ganz umgebaut ^^"
http://flashbreaker.com/home.html
und mein YT channel mit diversen game entwicklungs videos, vor allem shader zeugs
https://www.youtube.com/user/tagimbul/videos
Re: Fetter ACSII Parser [Re: tagimbul] #468212
09/25/17 12:31
09/25/17 12:31
Joined: Nov 2007
Posts: 2,568
Germany, BW, Stuttgart
MasterQ32 Offline
Expert
MasterQ32  Offline
Expert

Joined: Nov 2007
Posts: 2,568
Germany, BW, Stuttgart
Ich war mal so frei und habe deine Version etwas auf Performance und Speicher optimiert:

Code:
///////////////////////////////
#include <acknex.h>
#include <stdio.h>
#include <default.c>
///////////////////////////////

#define MAX_LEN 1024

function main()
{
	int numberOfStrings = 0;
	
	char buffer[MAX_LEN]; // 1kB pro Zeile, kann auch mehr sein (MAX_LEN ändern)
	FILE * f = fopen("meine_dialoge.txt", "r");
	while(!feof(f))
	{
		// Anzahl der Strings bestimmen durch zeilenweises
		// Einlesen
		if(fgets(buffer, MAX_LEN, f) != NULL) {
			numberOfStrings++;
		} else {
			if(ferror(f)) error("Error in file!");
		}
	}
	
	// char* anstelle von STRING* macht nen ordentlichen Speedup aus
	char ** array = malloc(sizeof(char*) * numberOfStrings);
	if(!array) error("something went wrong!");
	
	// Zurückspulen
	int index = 0;
	fseek(f, SEEK_SET, 0);
	while(!feof(f))
	{
		if(fgets(buffer, MAX_LEN, f) != NULL) {
		
			// Länge des Strings bestimmen
			int len = strlen(buffer);
			
			// Passenden Speicher allokieren
			// +1 für nullterminator
			array[index] = malloc(len + 1);
			
			// und den string kopieren
			strcpy(array[index], buffer);
			
			// RTFM: fgets lässt das 'n' am Ende der Zeile im String,
			// also: ABSCHNEIDEN!
			(array[index])[len] = 0;
			
			index++;
		} else {
			if(ferror(f)) error("Error in file!");
		}
	}
	
	fclose(f);

	var draw_y = 20;
	
	while(1)
	{
		draw_text(array[357141],20,draw_y,vector(255,255,255));
		wait(1);
	}
}



Hierbei sollte angemerkt sein: STRING ist verdammt langsam, also mehrere hunderte Male langsamer als "rohe" Stringfunktionen aus stdio.h


Visit my site: www.masterq32.de

Moderated by  HeelX, Lukas, rayp, Rei_Ayanami, Superku, Tobias, TWO, VeT 

Gamestudio download | chip programmers | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de

Powered by UBB.threads™ PHP Forum Software 7.7.1