AMIGA-RESISTANCE

Die Projektseite für alles rund um den Amiga
Aktuelle Zeit: 19 Apr 2024, 14:37

Alle Zeiten sind UTC


 

 

 



Ein neues Thema erstellen  Auf das Thema antworten  [ 18 Beiträge ]  Gehe zu Seite 1 2 »
Autor Nachricht
 Betreff des Beitrags: Ein Messdaten auslese Programm
BeitragVerfasst: 28 Feb 2011, 22:10 
Offline
Alter Hase
Benutzeravatar

Registriert: 17 Apr 2009, 08:53
Beiträge: 77
Postleitzahl: 0
Land: Deutschland
Wohnort: Berlin
Hallo
Ich bin am überlegen ob ich ein Programm mit Hollywood realisieren kann mit welches ich eine ASCI Datei einlesen kann und diese dann grafisch darstellen lassen kann.

Nun die erste Frage die ich da habe ist ob es möglich ist Werte aus zu lesen und einzeln dar zu stellen die mit einem Tabulator getrennt sind?
Sprich: Name<TAB>Datum<TAB>Zeit usw.
Mit seek() und readstring() und in Verbindung mit einem Hexeditor kann mann sich ja leider nur Fixe Werte herraus ziehen sprich wenn der Name mal vergessen wurde oder länger ist wird dann schon alles falsch angezeigt.

Hoffe ihr versteht mich und könnt da helfen, und nu ab ins Betchen

bye bye


Nach oben
   
 Betreff des Beitrags: Re: Ein Messdaten auslese Programm
BeitragVerfasst: 01 Mär 2011, 00:16 
Offline
Schreiberling
Benutzeravatar

Registriert: 17 Okt 2007, 21:48
Beiträge: 1393
Postleitzahl: 4132
Land: Schweiz
Wohnort: Muttenz
Salli Root

Jep, das sollte mit Hollywood gehen.

Mit OpenFile() öffnest Du eine Datei zum Lesen.

Mit ReadLine() liest Du eine ganze Zeile ein. Die
können verschieden lang sein, spielt keine Rolle.
ReadLine() liest alle Zeichen aus, bis ein Zeilenumbruch
kommt.

Mit SplitStr() kannst Du die Zeile in Einzelteile zerlegen:
Wort,Anzahl = SplitStr(Zeichenkette,Trennzeichen)
Als Trennzeichen willst Du ja ein TAB haben. Das
kannst Du als ASCII-Code mit diesem Befehl angeben: Chr(9)

Ich habe mal für mich eine Funktion geschrieben, welche
ein einzelnes Wort herauspickt. Mit Wortnummer gebe ich
an, welches Wort (das erste, oder das zweite...) er mir
geben soll:
Function p_GetWord(Zeichenkette,WortNummer,TrennZeichen)
    Local Wort,Anzahl = SplitStr(Zeichenkette,Trennzeichen)
    Return(Wort[Wortnummer-1])
EndFunction
Vergiss nicht am Schluss, die Datei mit CloseFile()
zu schliessen.


Hier mal ein kleines Beispiel, wie Du eine ganze Ascii-Datei
auslesen kannst. Das ganze musst Du natürlich für
Dich anpassen:
Function p_Laden(Datei)
    Local Vorhanden=False
    Vorhanden=Exists(Datei)      ;Existiert diese Datei?
    If Vorhanden=True              ;Falls sie existiert...
        OpenFile(1,Datei,#MODE_READ)    ;...wird sie zum Lesen geöffnet
            ZeilenZaehler=0
            While Not Eof(1)    ;Eof ist die Abkürzung für EndOfFile
                ZeilenZaehler=ZeilenZaehler+1    
                Texte[ZeilenZaehler-1] = ReadLine(1)   ;Zeile Auslesen
            Wend
        CloseFile(1)
    Else
        Test=SystemRequest("Fehler","Konnte Datei nicht öffnen","OK")
    EndIf
EndFunction
So, und nun kannst Du Dich um die einzelen Zeilen kümmern:

Mitglied,Anzahl = SplitStr(Texte[1],Chr(9))

Nun kannst Du auf das Mitglied zugreifen:

In Mitglied[1] ist z.B. der Name abgelegt
In Mitglied[2] ist somit das Datum zu finden
In Mitglied[3] befindet sich die Zeit

In diesem Falle wurde in Anzahl 3 abgelegt.

Das musst Du halt sooft wiederholen,
wie Zeilen ausgelesen wurden. Diese
Anzahl ist in ZeilenZaehler abgelegt.

Ich hoffe, das hilft Dir fürs Erste. Sonst
schrei nochmals (oder besser: Schreibe
nochmals).

Griessli
Tipsi


Nach oben
   
 Betreff des Beitrags: Re: Ein Messdaten auslese Programm
BeitragVerfasst: 01 Mär 2011, 21:10 
Offline
Alter Hase
Benutzeravatar

Registriert: 17 Apr 2009, 08:53
Beiträge: 77
Postleitzahl: 0
Land: Deutschland
Wohnort: Berlin
Hey wohh das ging aber schnell!
Das mit SplitString ist gut.
Ich hab das versucht das mit "RedString" zu lösen geht aber nur bescheiden weil er dann nur die Werte bis zum Tab splittet und den Zeilenumbruch vernachlässigt diesen (Hex0A) kann man nu aber leider nicht in "Chr()" verarbeiten lassen.
So werden dann manche Wörte nach dem ein Umbruch statt finden zusammen gefügt.

Hier mal mein Code
@APPVERSION     "$VER: 0.0.2 (28.02.2011)"
/* Fenster Einstellung */
@DISPLAY {Title = "SPROD Viewer", Width = 800, Height = 600, Color = $EAECEA}

/* Font Einstellungen */
@FONT 1, "DejaVu Sans", 15
UseFont(1)
SetFontColor(#BLACK)

text$={}

/* Datei öffnen usw. */
size$=FileSize("test.asc")
OpenFile(1, "test.asc" ,#MODE_READ)

text$=ReadString(1, size$)
werte$,strings$ = SplitStr(text$,Chr(09))



CloseFile(1)


/* Werte anzeigen lassen */
TextOut(#CENTER, 15, werte$[1])

TextOut(1, 575, "Dateigröße:")
TextOut(80, 575, size$)
TextOut(1, 585, "String Anzahl:")
TextOut(80, 585, strings$)


/* The End */
WaitLeftMouse()
End()
Jetzt werd ich mir mal deinen genauer anschauen und aus probieren.
Hab mal die ASCI Datei mit angehangen.


Dateianhänge:
Dateikommentar: zip entfernen
test.asc.zip [11.65 KiB]
304-mal heruntergeladen
Nach oben
   
 Betreff des Beitrags: Re: Ein Messdaten auslese Programm
BeitragVerfasst: 01 Mär 2011, 22:43 
Offline
Schreiberling
Benutzeravatar

Registriert: 17 Okt 2007, 21:48
Beiträge: 1393
Postleitzahl: 4132
Land: Schweiz
Wohnort: Muttenz
Salli root

Ich kann leider Deine ZIP-Datei nicht öffnen,
weder mit Windows noch mit dem Amiga.
Ich bekomme die Meldung, dass die Datei
unvollständig oder beschädigt ist.

Dadurch kann ich leider Dein Beispiel nicht
ganz nachvollziehen, da ich nicht weiss, wie
die ASCII-Datei aufgebaut ist.

Eigentlich sollte mit Deinem Codebeispiel

/* Werte anzeigen lassen */
TextOut(#CENTER, 15, werte$[1])

Alle Zeichen bis zum ersten TAB ausgeben
werden.

Was ich aber auch noch vermute, dass
SplitStr() Linefeed (Hex0A oder Chr(10))
nicht als Zeilenende berücksichtigt, sondern
nur Return (Hex0D oder Chr(13)).

Schick mir doch die test.asc Datei an meine
Mailadresse (gebe ich Dir per PN bekannt).
Dann kann ich weitersehen.

Griessli
Tipsi


Nach oben
   
 Betreff des Beitrags: Re: Ein Messdaten auslese Programm
BeitragVerfasst: 02 Mär 2011, 11:20 
Offline
Alter Hase
Benutzeravatar

Registriert: 17 Apr 2009, 08:53
Beiträge: 77
Postleitzahl: 0
Land: Deutschland
Wohnort: Berlin
Das ist keine Zip einfach in test.asc umbenennen. :blbl:


Nach oben
   
 Betreff des Beitrags: Re: Ein Messdaten auslese Programm
BeitragVerfasst: 03 Mär 2011, 01:46 
Offline
Schreiberling
Benutzeravatar

Registriert: 17 Okt 2007, 21:48
Beiträge: 1393
Postleitzahl: 4132
Land: Schweiz
Wohnort: Muttenz
Salli root

Grins, dann nehm ich halt das .zip weg.

Du benutzt ReadStr(), das geht in Deinem Fall nicht gut.
Benutze ReadLine(). Nur ReadLine() liest eine ganze Zeile
(ganze Linie) ein. ReadStr() beachtet keinen Zeilenumbruch,
sondern liest soviel Zeichen ein, wie er muss.

Hollywood kann Zeilen, welche eine eckige Klammer
[ oder ] nicht mit Textout() ausgeben. Darum habe
ich zwei Befehlszeilen eingebaut, welche diese Klammern
gegen geschwungene ( und ) austauschen. Ich hoffe,
Du kommst mit dem Code klar.

Falls Du ein grösseres Fenster als 800x600 aufmachen
kannst, dann mach es für dieses Beispiel breiter. Evtl.
haben nicht alle Wörter auf einer Zeile platz.

Bei Windows verschwindet plötzlich der Requester.
Wenn Du die Return-Taste drückst, geht es weiter.

Also, teste mal das Programm und ich hoffe, wir
sind einen Schritt weiter. Die ersten 6 Zeilen musst
Du den Requester bestätigen, anschliessend sollte
es seitenweise mit der linken Maustaste weitergehen.
Allerdings hatte ich nicht den Font DejaVu Sans
zur Verfügung, so dass die Ausgabe bei
Dir ein wenig anderst aussehen kann.
@APPVERSION     "$VER: 0.0.2 (28.02.2011)"
/* Fenster Einstellung */
@DISPLAY {Title = "SPROD Viewer", Width = 800, Height = 600, Color = $EAECEA}

/* Font Einstellungen */
@FONT 1, "DejaVu Sans", 15
UseFont(1)
SetFontColor(#BLACK)

text$={}

/* Datei öffnen usw. */
size$=FileSize("test.asc")
OpenFile(1, "test.asc" ,#MODE_READ)

Runde=1

While Not Eof(1)	    ;Schleife wird bei Dateiende nicht mehr ausgeführt
  PosY=15
  For Zaehler=0 To 28            ;Bei mir hatten 28 Zeilen auf einer Seite Platz
    PosX=20
    text$=ReadLine(1)
    werte$,strings = SplitStr(text$,"\t")      ;Habe mal Chr(9) mit "\t" ausgewechselt
    For Anzahl=0 To strings-1
      werte$[Anzahl] = ReplaceStr(werte$[Anzahl],"[", "(")  ;Austausch von [] gegen ()
      werte$[Anzahl] = ReplaceStr(werte$[Anzahl],"]", ")")
      If Runde=1 And Zaehler<6
        Test=SystemRequest("X: "..PosX.."   Y: "..PosY,werte$[Anzahl],"Weiter")
      EndIf
      TextOut(PosX, PosY, werte$[Anzahl])
      If Runde=1
        PosX=PosX+200      ;Auf der ersten Seite habe ich 200 Pixel... 
      Else                 ;...Abstand zwischen den Wörtern genommen
        PosX=PosX+100      ;Ab Seite 2 wird die Ausgabe enger
      EndIf
    Next
    PosY=PosY+20
  Next
  WaitLeftMouse()
  Cls($EAECEA)
  Runde=Runde+1
Wend()
CloseFile(1)


/* Werte anzeigen lassen */

TextOut(#CENTER, PosY+20, "Dateigröße:")
TextOut(#CENTER, PosY+40, size$)
;TextOut(#CENTER, PosY+40, "String Anzahl:")
;TextOut(#CENTER, PosY+60, strings$)



/* The End */
WaitLeftMouse()
End()
Griessli
Tipsi


Zuletzt geändert von Tipsi am 03 Mär 2011, 22:58, insgesamt 1-mal geändert.

Nach oben
   
 Betreff des Beitrags: Re: Ein Messdaten auslese Programm
BeitragVerfasst: 03 Mär 2011, 11:19 
Offline
Administrator
Benutzeravatar

Registriert: 30 Aug 2005, 19:42
Beiträge: 5304
Postleitzahl: 46047
Land: Deutschland
Wohnort: 46047 Oberhausen
Ich habs mal ins normale Forum verschoben, da in den oberen Unterforen nur die Sachen rein sollen die auch schon fertig sind.

_________________
Gruß Helmut
Amiga 2000, Amiga 500, Amiga One XE, Amiga One X5000


Nach oben
   
 Betreff des Beitrags: Re: Ein Messdaten auslese Programm
BeitragVerfasst: 05 Mär 2011, 22:26 
Offline
Alter Hase
Benutzeravatar

Registriert: 17 Apr 2009, 08:53
Beiträge: 77
Postleitzahl: 0
Land: Deutschland
Wohnort: Berlin
:moin:

Hab heute endlich mal wieder etwas Zeit gefunden am Programm zu feilen.

Dabei hab ich nun meinen Denkfehler gefunden. :idea:
Wenn aus der Datei mittels Readline eine Zeile ausgelesen wird dies dann in einer Schleife geschieht dann kann ich nur in einem Durchgang der Schleife die Werte daraus ziehen ansonsten werden sie ja wieder im nächsten Durchgang überschrieben.
Und ich dachte ich kann das mit einem Rutsch einlesen und dann mir die gewünschten Werte raus nehmen.
Hui dies bedeutet Arbeit.

@Tipsi
Bei deinem Programm bekomme ich eine Fehlermeldung beim Ende.
[ img ]

Ansonsten vielen lieben Dank du bist immer so schnell!
Diese --> [ Eckigenklammern kann man schon schreiben mann muß halt nur zwei von ihnen schreiben
Print([[) z.B.


Nach oben
   
 Betreff des Beitrags: Re: Ein Messdaten auslese Programm
BeitragVerfasst: 06 Mär 2011, 00:58 
Offline
Schreiberling
Benutzeravatar

Registriert: 17 Okt 2007, 21:48
Beiträge: 1393
Postleitzahl: 4132
Land: Schweiz
Wohnort: Muttenz
Salli Root

Ja, Du hast ein "kleines" Stück Arbeit vor Dir.

Diese Fehlermeldung bekomme ich auch. Ist mir erst
jetzt aufgefallen. Ich habe keine Eof(1) Abfrage in
der For-Next Schleife eingebaut. So wird halt bei
den letzten Daten mit der Fehlermeldung abgebrochen.
Allerdings war die Ausgabe ja nur eine Möglichkeit,
was man mit den Daten anstellen kann. Ich denke,
Du möchtest das anders haben.

Ah das mit [[ wusste ich nicht, danke für den Tipp.
Aber dann kannst Du ja bei den beiden Zeilen die
geschwungenen Klammern mit zwei eckigen ersetzen.

Griessli
Tipsi


Nach oben
   
 Betreff des Beitrags: Re: Ein Messdaten auslese Programm
BeitragVerfasst: 06 Mär 2011, 12:46 
Offline
Schreiberling

Registriert: 10 Aug 2007, 23:47
Beiträge: 262
Also man muss sagen es ist toll was hier so rauskommt, im grunde habt ihr beiden schon einen kleinen Textreader hier zusammen geschrieben :)
Allerdings ist es so das er bei mehren Leerstellen dazwischen noch das Lesen aufhört.

Ich frage mich aber ob Readchr nicht generell besser geeignet wäre für den Zweck ? Readchr in einer Schleife wo jedes Zeichen einzeln eingelesen wird, und dann muss man entscheiden ob Trennzeichen oder Du ne Grafik plotten willst oder es neu zusammensetzen willst.

So in etwa. Jedes Zeichen wird einzel gelesen. In der Schleife kannst Du verzweigen, oder ein bestimmtes Zeichen suchen.
@APPVERSION     "$VER: 0.0.2 (28.02.2011)"
/* Fenster Einstellung */
@DISPLAY {Title = "SPROD Viewer", Width = 800, Height = 600, Color = $EAECEA}

/* Font Einstellungen */
;@FONT 1, "DejaVu Sans", 15
;UseFont(1)
SetFontColor(#BLACK)

 OpenFile(1, "test.txt", #MODE_READ)
        ;WriteLine(1, "Hello People! How are you?")
        ;Seek(1, 0)
While Not Eof(1)
        test = ReadChr(1)
        test$ = Chr(test)
        Print(test$)
Wend()
 CloseFile (1)
 /* The End */
WaitLeftMouse()
End()       


Nach oben
   
 Betreff des Beitrags: Re: Ein Messdaten auslese Programm
BeitragVerfasst: 07 Mär 2011, 14:53 
Offline
Schreiberling
Benutzeravatar

Registriert: 17 Okt 2007, 21:48
Beiträge: 1393
Postleitzahl: 4132
Land: Schweiz
Wohnort: Muttenz
@root
Du kannst natürlich schon alles zuerst
einem Table zuweisen (um die Schleife
kommst Du aber nicht herum) und dann
die einzelnen Daten herauslesen.

@Murmel
Textreader, soweit sind meine Gedanken
gar nicht gegangen. :)
Das wäre auch eine Möglichkeit, mit Readchr()
jedes einzelne Zeichen einzulesen. Ich weiss
leider nicht, welche Art schneller oder komfortabler
ist.

Griessli
Tipsi


Nach oben
   
 Betreff des Beitrags: Re: Ein Messdaten auslese Programm
BeitragVerfasst: 21 Mär 2011, 21:46 
Offline
Alter Hase
Benutzeravatar

Registriert: 17 Apr 2009, 08:53
Beiträge: 77
Postleitzahl: 0
Land: Deutschland
Wohnort: Berlin
nabend!

So hoffe morgen hab ich wieder etwas mehr Zeit und Ruhe mich da mal wieder ran zu setzen.
Excel und Makros ist zwar ganz praktisch aber glaube mit Hollywood wird das "falls ich es mal fertig bekomme" viel schöner und besser.


Das mit den Tabellen muß ich mir mal an schauen.
In Readchr() sehe ich zur Zeit keine Art von Vorteil.

bb


Nach oben
   
 Betreff des Beitrags: Re: Ein Messdaten auslese Programm
BeitragVerfasst: 29 Mär 2011, 23:04 
Offline
Schreiberling

Registriert: 10 Aug 2007, 23:47
Beiträge: 262
Hi Root.

Die Vorteile die ich bei Readchr bisher sehe ist das jeder Text komplett eingelesen wird egal ob Leerstelle da sind oder nicht, oder wie lang er ist Selbst Dokumente mit steuercodes scheinen kein Problem darzustellen.

Ich würde alles einlesen in eine Variable schreiben, und dann das rausfiltern was ich brauche.


Grüsse,

Murmel


Nach oben
   
 Betreff des Beitrags: Re: Ein Messdaten auslese Programm
BeitragVerfasst: 02 Mai 2011, 20:43 
Offline
Alter Hase
Benutzeravatar

Registriert: 17 Apr 2009, 08:53
Beiträge: 77
Postleitzahl: 0
Land: Deutschland
Wohnort: Berlin
Hallo
Ich mal endlich was geschafft zwar nicht das was ich wollte (das auslesen der *.asc File) sondern etwas am GUI* gebastelt. Und mich mit dem Zeichen der Grafik beschäftigt.
Hab mal ein Bild mit angefügt damit ihr ungefähr eine Vorstellung bekommt wo die Reise hingehen soll.
[ img ]

Den Code füge ich aber mal nicht mit an da da noch sehr viel zu viel Schrott mit drinne steht.


Nach oben
   
 Betreff des Beitrags: Re: Ein Messdaten auslese Programm
BeitragVerfasst: 02 Mai 2011, 21:58 
Offline
Schreiberling

Registriert: 10 Aug 2007, 23:47
Beiträge: 262
Wow sieht top aus :) Hast Du den Designer benutzt oder rbeitest Du ohne ?


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 18 Beiträge ]  Gehe zu Seite 1 2 »

Alle Zeiten sind UTC


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Gehe zu: 

cron