Autor Beitrag
Opfer15
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19

Windows Xp, Vista, 2k, Suse Linux 9
C#, Delphi
BeitragVerfasst: Mo 28.08.06 20:05 
so ich hab jetzt mal nen txt zu sql converter für mich gebaut und nun convertiert er halt 35 mb große Textdateien und da ich alles mit if sätzen gelöst habe ist das ziemlich langsam geworden kann ich da irgendwie abhilfe schaffen weil 1-2h möchte ich net für ne einfach convertierung warten (bei amd 64 3700+ wohlgemerkt :P);

so hier nen bsp.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
if pos('[creature', sl_scp[I]) > 0 then
      begin
       //if found do save in given format
      end;
    if pos('model', sl_scp[I]) > 0 then
      begin
      modelid := sl_scp[I];
      Delete(modelid, 16);
      end;
    if pos('name', sl_scp[I]) > 0 then
      begin
      name := sl_scp[I];
      Delete(name, 15);
      end;
    if pos('guild', sl_scp[I]) > 0 then
      begin
      subname := sl_scp[I];
      Delete(modelid, 16);
      end;


oder aber auch


ausblenden volle Höhe Delphi-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:
if pos('SPAWN', sl_cr[I]) > 0 then              //wenn spawn gefunden dann
          if pos('SPAWN_GOBJ', sl_cr[I]) > 0 then
          else
          if pos('SPAWNDIST', sl_cr[I]) > 0 then
          else     //wenn spawndist gefunden dann tue nichts dann aber
          if pos('SPAWNTIME', sl_cr[I]) > 0 then          //wenn spawntime in min und max splitten
          begin
            sl_delimit.Delimiter := ' ';
            sl_delimit.DelimitedText := sl_cr[I];
            spawntimemin := sl_delimit[0];
            Delete(spawntimemin, 110);
            spawntimemax := sl_delimit[1];
          end
          else
          begin
            sl_delimit.Delimiter := ' ';
            sl_delimit.DelimitedText := sl_cr[I];
            ID := sl_delimit[0];
            Delete(ID, 16);
            crI := sl_scp.IndexOf('[Creature ' + ID + ']');
            if crI < 0 then else
            for crI := crI to crI+40 do
            begin
            if foundmana > 0 then
            if foundhealth > 0 then break else
            if pos('maxhealth= ', sl_scp[crI]) < 0 then
            if foundhealth > 0 then else
             begin
             health := sl_scp[crI];
             Delete(health, 110);
             foundhealth := 1
             end;
            if pos('maxmana= ', sl_scp[crI]) < 0 then
            if foundmana > 0 then else
             begin
             mana := sl_scp[crI];
             Delete(mana, 18);
             foundmana := 1;
             end;


Wundert euch nicht über verwirrende Kommentare ^^ und für suchlustige irgendwo hab ich in diesem Code ein break versteckt was aufgrund mangelnder Programmierkenntnisse nicht funktioneiert :P
So genug der grausigen rechtschreibung und TIA hoffe was zu hören auch wenn ich nur was verlange ^^


Moderiert von user profile iconChristian S.: Topic aus VCL (Visual Component Library) verschoben am Mo 28.08.2006 um 20:06
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mo 28.08.06 20:14 
Wie speicherst Du die Daten in die Datenbank? Zeig mal ein wenig mehr Quelltext der Konvertierungsroutine, ich denk, der Fehler liegt an einer anderen Stelle ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Opfer15 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19

Windows Xp, Vista, 2k, Suse Linux 9
C#, Delphi
BeitragVerfasst: Mo 28.08.06 20:22 
erstmal danke für die schnell antwort..

ich speichere sie nicht direkt in der Datenbank sondern mache daraus ein *.sql file in dem ich die variablen die ich mit den werten aus dem text gespeichert hab ihn mysql format bring sodass einfach jedem dem ich die datei gebe seine Datenbank damit patchen kann
sieht so aus (war ganz schöne denkarbeit das zu schreiben :P)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
            s1  := '''';  //Anführungsstriche
            s2  := ', ';  //Komma mit anführungsstrichen
            sl_final.Add('(' + IntToStr(entry) + s2 + ID + s2 + '''0''' + s2 + s1 + posx + s1 + s2 + s1 +
              posy + s1 + s2 + s1 + posz + s1 + s2 + s1 + orientation + s1 + s2 + spawntimemin + s2 + spawntimemax +
              s2 + '''0''' + s2 + waypoint + s2 + s1 + posx + s1 + s2 + s1 + posy + s1 + s2 + s1 + posz + s1 + s2 +
              s1 + orientation + s1 + health + s2 + mana + s2 + '0' + s2 + '0' + s2 + npcflags + s2 + faction + s2 + s1 + s1 + '),');


falls es irgendwie auch die geschwindigkeit beinträchtigt ich hab verdammt viele variablen z.b.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
sl_delimit,sl_output:TstringList;

modelid,maxhealth,maxmana,level,faction,npcflag,speed,mindmg,maxdmg,mount,
level_max,size,bounding_radius,clase,combat_reach,typus,flag1,

equipmodel1,equipmodel2,equipmodel3,equipinfo1,equipinfo2,equipinfo3,equipslot1,
equipslot2,equipslot3,lootid,skinloot,resistance1,resistance2,resistance3,
resistance4,resistance5,resistance6,
//don't know where to get or split for data
spell1,spell2,spell3,spell4,mingold,
maxgold,name,subname,AIName,MoveName,char,ScriptName:string;

//not in use but maybe neccessary or usefull

entry,armor,rank,attackpower,baseattacktime,rangeattacktime,flags,dynamicflags,
family,trainer_typus,minrangedmg,maxrangedmg,rangedattackpower,civilian:string;


//Edit
Hello anybody there ?????? HUHU