AMIGA-RESISTANCE https://forum.amiga-resistance.info/ |
|
Ein Messdaten auslese Programm https://forum.amiga-resistance.info/viewtopic.php?f=38&t=3094 |
Seite 1 von 2 |
Autor: | root [ 28 Feb 2011, 22:10 ] |
Betreff des Beitrags: | Ein Messdaten auslese Programm |
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 |
Autor: | Tipsi [ 01 Mär 2011, 00:16 ] |
Betreff des Beitrags: | Re: Ein Messdaten auslese Programm |
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: Code: Alles auswählen Function p_GetWord(Zeichenkette,WortNummer,TrennZeichen) Local Wort,Anzahl = SplitStr(Zeichenkette,Trennzeichen) Return(Wort[Wortnummer-1]) EndFunction 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: Code: Alles auswählen 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 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 |
Autor: | root [ 01 Mär 2011, 21:10 ] | ||
Betreff des Beitrags: | Re: Ein Messdaten auslese Programm | ||
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 Code: Alles auswählen @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() Hab mal die ASCI Datei mit angehangen.
|
Autor: | Tipsi [ 01 Mär 2011, 22:43 ] |
Betreff des Beitrags: | Re: Ein Messdaten auslese Programm |
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 |
Autor: | root [ 02 Mär 2011, 11:20 ] |
Betreff des Beitrags: | Re: Ein Messdaten auslese Programm |
Das ist keine Zip einfach in test.asc umbenennen. ![]() |
Autor: | Tipsi [ 03 Mär 2011, 01:46 ] |
Betreff des Beitrags: | Re: Ein Messdaten auslese Programm |
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. Code: Alles auswählen @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() Tipsi |
Autor: | HelmutH [ 03 Mär 2011, 11:19 ] |
Betreff des Beitrags: | Re: Ein Messdaten auslese Programm |
Ich habs mal ins normale Forum verschoben, da in den oberen Unterforen nur die Sachen rein sollen die auch schon fertig sind. |
Autor: | root [ 05 Mär 2011, 22:26 ] |
Betreff des Beitrags: | Re: Ein Messdaten auslese Programm |
![]() Hab heute endlich mal wieder etwas Zeit gefunden am Programm zu feilen. Dabei hab ich nun meinen Denkfehler gefunden. ![]() 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. ![]() 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. |
Autor: | Tipsi [ 06 Mär 2011, 00:58 ] |
Betreff des Beitrags: | Re: Ein Messdaten auslese Programm |
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 |
Autor: | Murmel [ 06 Mär 2011, 12:46 ] |
Betreff des Beitrags: | Re: Ein Messdaten auslese Programm |
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. Code: Alles auswählen @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() |
Autor: | Tipsi [ 07 Mär 2011, 14:53 ] |
Betreff des Beitrags: | Re: Ein Messdaten auslese Programm |
@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 |
Autor: | root [ 21 Mär 2011, 21:46 ] |
Betreff des Beitrags: | Re: Ein Messdaten auslese Programm |
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 |
Autor: | Murmel [ 29 Mär 2011, 23:04 ] |
Betreff des Beitrags: | Re: Ein Messdaten auslese Programm |
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 |
Autor: | root [ 02 Mai 2011, 20:43 ] |
Betreff des Beitrags: | Re: Ein Messdaten auslese Programm |
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. ![]() Den Code füge ich aber mal nicht mit an da da noch sehr viel zu viel Schrott mit drinne steht. |
Autor: | Murmel [ 02 Mai 2011, 21:58 ] |
Betreff des Beitrags: | Re: Ein Messdaten auslese Programm |
Wow sieht top aus ![]() |
Seite 1 von 2 | Alle Zeiten sind UTC |
Powered by phpBB® Forum Software © phpBB Limited Deutsche Übersetzung durch phpBB.de |