Italia
Foro

Gibt's da einen Befehl per?

 

Matthias
Badzun
Moin moin,

ich bin Umsteiger von Turbo-/Power-Basic mit gut 10-jährigem "Schaffensloch" und habe darum ein Problem (V.11 Vollversion)

Ich muß Variabele aus einer an sich sequenziellen File einlesen, die aber einige Zeilen enthält in denen mehrere Variabele mit Kommata getrennt vorkommen. Anzahl und Typ dieser Variabelen ist in diesen Zeilen immer gleich, Strings und Zahlen gemischt, Strings sind zusätzlich innerhalb "".

Beispiel:
--------------------------------------------------------
15840
1
13,13,6,20,11,12,15
550
595
600
385
390
1,81074,36626,"Herr",36526,"Unbekannt","Diagnose","€","Schlusstext, 2. Zeile"
3
--------------------------------------------------------

Die Strings können auch Sonderzeichen, Punkt und Kommata sowie <LF> und <CR> enthalten, aber keine "" innerhalb eines Stringtextes. Die Textlängen sind unbestimmt.

Mit meinen alten Basic-Varianten war das kein Problem (leider aber nicht Windows-fähig), aber in XProfan 11 habe ich dazu noch nichts funktionierendes entdeckt. Aber da es ja "geht nicht" nicht gibt, kann mir bestimmt jemand weiter helfen.

Vorab vielen Dank
Saluto, Matthias
 
Gruß,
Matthias
08.12.2008  
 




Christian
Eichler
Was ich persönlich, als jemand der gerade auf C umsteig, in diesem Fall machen würde ist folgendes:

Ich würde jeden Buchstaben einzeln vergleichen und dabei die " mitzählen. Ist die Anzahl der " ungerade ist das , innerhalb der ", ist sie gerade handelt es sich tatsächlich um ein Trennkomma.

Das ist blos ne spontane Idee von mir gewesen.

BTW: Überprüfen, ob eine Zahl gerade ist oder nicht kann man wunderbar mit Modulo 2

Grüße Christian
 
Debian Lenny, Intel Celeron 2,8 Ghz, 768 MB Ram && Win XP Pro, Intel C2D 1,66Ghz, 2 GB Ram ... PROFAN² 6.6
08.12.2008  
 




Frank
Abbing
Sind die einzelnen Zeilen durch <CR> getrennt?
Ist naturalmente alles machbar, nur fehlen noch ein paar Infos. Wenn die File nicht gerade gigantisch gross sind, würde ich sie in einen Bereich laden und dann parsen.
 
08.12.2008  
 




Matthias
Badzun
Die File können 300~400 kB grande sein, teoretisch auch größer aber in der Praxis eher nicht. Die Zeilen sind durch <CR><LF> getrennt. Aber inerhalb der Strings können ebenfalls <CR><LF> als Zeilenumbruch im Klartext vor kommen, die sich auch im EDITOR so darstellen. Die dürfen dann naturalmente nicht als Ende der Datenzeile interpretiert werden.
 
Gruß,
Matthias
08.12.2008  
 




Dietmar
Horn
Hallo Matthias,

ich würde die File sequentiell einlesen und jede Zeile in einer Schleife mit SubStr$ durchforsten (mit Komma als Trennzeichen), bis nichts mehr kommt (siehe XProfan-Aiuto zu Substr$).

Die Strings erkennst Du dann ja an den Anführungszeichen, die Du mit Instr überprüfen kannst.
Bei nur 300 bis 400 KB müßte das 1-2-fix gehen.

Da potrebbe dann auch <CR><LF> innerhalb der Strings nicht stören.

Saluto
Dietmar
 
Multimedia für Jugendliche und junge Erwachsene - MMJ Hoyerswerda e.V.  [...] 

Windows 95 bis Windows 7
Profan² 6.6 bis XProfan X2 mit XPSE

Das große XProfan-Lehrbuch:  [...] 
08.12.2008  
 




Frank
Abbing
Ja, kommt <CR><LF> innerhalb von Anführungszeichen vor, befinden sie sich in im String. Ansonsten trennen sie die einzelnen Zeilen voneinander ab. Ich würde alles in einen Bereich lesen und zeichenorientiert parsen.
 
08.12.2008  
 



Matthias Badzun
Ich muß Variabele aus einer an sich sequenziellen File einlesen, die aber einige Zeilen enthält in denen mehrere Variabele mit Kommata getrennt vorkommen. Anzahl und Typ dieser Variabelen ist in diesen Zeilen immer gleich, Strings und Zahlen gemischt, Strings sind zusätzlich innerhalb "". Die Strings können auch Sonderzeichen, Punkt und Kommata sowie <LF> und <CR> enthalten, aber keine "" innerhalb eines Stringtextes. Die Textlängen sind unbestimmt.


Würde ich per Array lösen.

Hab "einladen" und "getxy" auf obiges angepasst, dass das mit den Strings klappt.
KompilierenMarkierenSeparierenbzw.
KompilierenMarkierenSeparieren
DECLARE MYDATA.STRINGS$[]
DECLARE MYDATA$[]
MYDATA$[]=MYDATA.LOADFROMSTRING(FGC("meineDatei"))
CLS
PRINT "Zeilen:",SIZEOF(MYDATA$[])
PRINT "1,1:",MYDATA.GETXY(1,1)
PRINT "3,3:",MYDATA.GETXY(3,3)
PRINT "1,5:",MYDATA.GETXY(1,5)
PRINT "3,9:",MYDATA.GETXY(3,9)
PRINT "4,9:",MYDATA.GETXY(4,9)
PRINT "6,9:",MYDATA.GETXY(6,9)
WAITINPUT
end

proc MYDATA.LOADFROMSTRING

    PARAMETERS DATA$
    DECLARE LNS$[]
    CLEAR MYDATA.STRINGS$[]
    LNS$[]=EXPLODE(DATA$,"q")
    var C&=SIZEOF(LNS$[])

    IF (C&=0)

        IF (LNS$[0]="")

            RETURN LNS$[]

        ENDIF

    ENDIF

    DATA$=""

    WHILELOOP 0,C&-1

        IFNOT (&LOOP MOD 2)

            DATA$=DATA$+LNS$[&LOOP]

        ELSE

            MYDATA.STRINGS$[SIZEOF(MYDATA.STRINGS$[])]=LNS$[&LOOP]
            DATA$=DATA$+"q"+STR$(INT(SIZEOF(MYDATA.STRINGS$[])))+"q"

        ENDIF

    ENDWHILE

    DECLARE NDATA$[]
    NDATA$[]=EXPLODE(DATA$,"
    ")
    RETURN NDATA$[]

endproc

proc MYDATA.GETXY

    PARAMETERS X&,Y&
    DEC Y&
    var S$=SUBSTR$(MYDATA$[Y&],X&,",")

    IFNOT MID$(S$,1,1)="q"

        RETURN S$

    ENDIF

    var N&=VAL(DEL$(S$,1,1))

    IFNOT N&

        RETURN ""

    ENDIF

    RETURN MYDATA.STRINGS$[N&-1]

endproc

proc FGC

    PARAMETERS FLE$
    var FH&=ASSIGN(FLE$)

    IFNOT FH&

        RETURN ""

    ENDIF

    RESET #FH&
    var S$=""
    var _OUT$=""

    WHILENOT EOF(FH&)

        INPUT #FH&,S$
        _OUT$=_OUT$+S$

        IFNOT EOF(FH&)

            _OUT$=_OUT$+"
            "

        ENDIF

    ENDWHILE

    CLOSE FH&
    ASSIGN FH&,""
    RETURN _OUT$

endproc

 
08.12.2008  
 




Matthias
Badzun
Vielen Dank euch allen per die verschiedenen Ideen. Soweit ich die mit meinem noch recht bescheidenen Xprofan-Kenntnissen nachvollziehen konnte hab ich sie ausprobiert.
Da in den Textfeldern Kommata vorkommen geht substr$ nicht - das mach dann dort ein neues Feld auf und weiter hinten stehende werden dann nicht mehr gelesen. Also musste ich doch die Zeile zunächst komplett einlesen und dann Byte per Byte auspicken. Irgendwas hakt zwar noch manchmal beim Wieder-zusammenbau der Texte in einen neuen String, muß mit dem Feldinhalt zu tun haben, aber wenigstens hab ich schon mal alle meine Felder wieder in einzelnen Variabelen.

Frohe Festtage und guten Rutsch per alle

Matthias
 
Gruß,
Matthias
19.12.2008  
 



In meinem Posting (2 hoch) stehen zwei funktionierende (getestet) Lösungen, magst nicht?

(naja, schwer zu übersehen ists ja nicht da einziger Code hier im Thread *g*)

Auf Deutsch: Der Code zeigt doch wie es funzt und ist zudem sehr schnell.
 
19.12.2008  
 




Matthias
Badzun
mögen tät ich die schon, aber da reicht mein profanes Xprofan-Wissen noch lange nicht aus um das zu verstehen. Wenn dann in der Praxis was aneckt hab ich keine Chance, die Ursachen zu entdecken.
So ganz allmählich stoße ich hier auf die Equivalente zum Altgelernten. Aber ein paar Progrämmle muß ich mir wohl noch rausquälen um wieder fit zu werden.
Trotzdem viele Dank per diese Scripte, sind auf der Platte, aber noch nicht im Hirn Bis bald, bis zum nächsten Schlauch, auf dem ich eine Weile ausharre
 
Gruß,
Matthias
19.12.2008  
 



You are welcome!

Wenn Fragen entstehen...

Aber vielleicht potuto ja ein Geübter obigen Code etwas humanisieren.
 
19.12.2008  
 



Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

1.825 Views

Untitledvor 0 min.
Peter Max Müller30.09.2014
Georg Hovenbitzer02.10.2013
Michaeal18.10.2012
iF05.03.2011

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie