Das OFFIZIELLE PROFAN SUPPORT FORUM
Einsteigerfragen
PROFAN-Programmierung
Helfer & Tools
Anregungen & Vorschläge
PROFAN-NEWS
Die Regeln!
2 - PROFAN-Programmierung

 Neues Thema  |  Zur Übersicht  |  Suchen  |  Einloggen   Neuerer Beitrag  |  Älteres Thema 
 Behandlung von Textdateien (Speicern/Laden/EditBox/Multiedit))
Autor: Markus Barkholz (---.unity-media.net)
Datum:   09.01.18 17:27

Ich habe mir ein paar EditBoxes und zwei MultiEdit-Elemente erzeugt, die Eingaben in ein Array gespeichert und in eine Textdatei erzeugt.

 Assign #1,$ProgDir + "TEST.txt"
 Reset #1
 For z,0,999
   Input #1,Test$ : Info$[0,z] = Test$
   Input #1,Test$ : Info$[1,z] = Test$
   Input #1,Test$ : Info$[2,z] = Test$
   Input #1,Test$ : Info$[3,z] = Test$
   Input #1,Test$ : Info$[4,z] = Test$
   Input #1,Test$ : Info$[5,z] = Test$
   Input #1,Test$ : Info$[6,z] = Test$
   Input #1,Test$ : Info$[7,z] = Test$
   Input #1,Test$ : Info$[8,z] = Test$
   Input #1,Test$ : Info$[9,z] = Test$
   Input #1,Test$ : Info$[10,z] = Test$
 EndFor
 Close #1
 


Da die letzten beiden Input#1 -Anweisungen MultiEdit-Inhalte enthalten, gibt es bei dem o.G. Beispiel Probleme. Der Grund liegt beim Zeilenweisen Einlesen in das Array. Die MultiEdit-Inhalte werden dadurch nicht mehr richtig dargestellt und falsch zugewiesen.

Ich könnte das ganze ja in eine Datenbank schreiben und erspare mir bestimmt einiges an ärger. Aber SQL steht bisher "noch" nicht auf dem privaten Stundenplan ;-)

Wie speicherere ich denn Textzeilen- und MultiEdit-Texte in eine einzige Textdatei und lade sie dann mit richtiger Array-Zuordnung?

Der Grund für dieses Vorgehen ist folgender...

Ich habe eine menge an Passwörtern, Seriennummern und Registrierungsschlüssel. Dafür wollte ich mir ein Tool schreiben um diese zu verwalten. Gleichzeitig soll aber eine Beschreibung zu dieser Software bereitgestellt werden... und diese ist meist kein einzelner Satz sondern beinhalten noch andere wichtige Infos wie Online-Registrierungen oder Hardware-Keys. Letztere sollen auf keinen Fall auseinangergerissen werden.
Gleichzeitig möchte ich aber noch die Möglichkeit haben weitere Informationen per Hand in die betreffende Textdatei schreiben zu können. Und genau da ist eine Datenbank jetzt nicht so geeignet.

Also, wie kann ich das realisieren?

Beitrag beantworten
 
 Re: Behandlung von Textdateien (Speicern/Laden/EditBox/Multiedit))
Autor: p. specht (---.aon.at)
Datum:   09.01.18 18:20

Könnte @GetChar$(#N1, N2) helfen? Die Textlänge müsste bekannt sein, oder jeder char auf 0 (Ende) getestet werden...

____
Ein richtiges Problem hat keine Lösung, nur Näherungen!

Beitrag beantworten
 
 Re: Behandlung von Textdateien (Speicern/Laden/EditBox/Multiedit))
Autor: Markus Barkholz (---.unity-media.net)
Datum:   09.01.18 18:40

Hmmh, ich sehe grade das es da auch den BlockRead gibt. Könnte in Kombination mit GetChar$ tatsächlich funktionieren.

Ich versuchs mal.

Danke für den Gedankenanstroß

Beitrag beantworten
 
 Re: Behandlung von Textdateien (Speicern/Laden/EditBox/Multiedit))
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   09.01.18 18:46

Gerade dazu eignet sich XProfans integriertes
dBase hervorragend. Der Inhalt des Multi-Edit
kommt einfach in ein Memofeld. Die 64 KB wirst
du ja wahrscheinlich nicht sprengen.

Das wäre die einfachste Variante.

Wenn es dennoch eine Textdatei sein muß, kann
man auch den Weg über eine Struktur gehen und
mit BlockWrite und BlockRead schreiben und lesen.

Die Struktur enthält dann außer den normalen Variablen
dann auch einen Bereich (#(n)), der den Inhalt des
Multi-Edit aufnimmt. Mit BlockWrite und BlockRead
läßt sich das auch schön schreiben und lesen, da man
ja den Offset und die Anzahl Bytes angeben kann.
Offset ist dann am Anfang 0 und sonst immer ein
Vielfaches von SizeOf(Struktur). Man muß nur 1 dazu
zählen, um auf den Anfang des nächsten Datensatzes
zu kommen.
Anzahl Bytes zum Schreiben /Lesen ist immer fest
-> SizeOf(Struktur).

Die Anzahl Datensätze werden dann mit
FileSize / SizeOf(Struktur)
ermittelt.

Das Auslesen bzw. Schreiben vom Multi-Edit erledigt man
einfach über
Move("HandleToList", HandleMultiedit)
Move("ListToMem", Bereich#, Chr$(13) + Chr$(10))
und umgekehrt.
Ist zwar etwas aufwändiger, aber durchaus einfach machbar.

PS: Bei mehr Multi-Edits gibt's auch mehr Bereiche in der
Struktur.

H.Brill
XProfan X4 + FreeProfan

Nachricht bearbeitet (09.01.18 18:56)

Beitrag beantworten
 
 Re: Behandlung von Textdateien (Speicern/Laden/EditBox/Multiedit))
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   09.01.18 19:46

Ach ja, um bei deinem obigen Array zu bleiben :
Das liegt daran, daß die Zeilen mit Chr$(13) + Chr$(10)
abgeschlossen sind.
Somit erhältst du natürlich nur eine Zeile statt dem ganzen
Text. Das ganze kannst du erschlagen, wenn du beim Auslesen
des Multi-Edits mit Translate$(zeile$, Chr$(13) + Chr$(10), "|")
das CRLF elemenierst. Beim Befüllen mußt du es dann auch
umgekehrt machen.

Feiner geht es auch so :
ClearList
Move("HandleToList", HandleMultiEdit)
Move("ListToStr", "|")

Damit haste das CRLF auch sofort erschlagen.

Beim Einlesen aus Datei :
ClearList
Move("StrToList", zeile$, "|")
Move("ListToHandle", HandleMultiEdit)

H.Brill
XProfan X4 + FreeProfan

Nachricht bearbeitet (09.01.18 19:53)

Beitrag beantworten
 
 Re: Behandlung von Textdateien (Speicern/Laden/EditBox/Multiedit))
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   10.01.18 17:01

Was mir jetzt noch einfällt, wäre eine .ini - Datei.
Das ist dann auch was flexibles. Wenn du nicht
tausende von Datensätzen hast, ist das auch noch
vertretbar.
Um auch wieder was zu finden, befüllt man die Abschnitte
mit fortlaufenden Nummern. Am Anfang macht man
einen Abschnitt, der die Anzahl Datensätze enthält.
Mit jedem neuen Datensatz erhöht man die Anzahl.

Die ini-Datei könnte dann so aussehen :

Zitat:


[Datensätze]
Anzahl = 2

[1]
Passwort = blabla
Seriennummer = 4711
Text1 = Inhalt von Multi-Edit

[2]
Passwort = buhbuh
Seriennummer = 0815
Text1 = Inhalt von Multi-Edit


Bei jedem Zugriff liest man die Anzahl aus und kann
dann bequem die Datensätze in einer Schleife durchgehen.
Bei extra Informationen hindert einen ja keiner daran,
einen neuen Abschnitt z.B. [Info] anzulegen und darunter
Daten abzulegen.

Auch das Ändern klappt gut, da die Abschnitte wegen
der Zahlen-Nummerierung eindeutig sind.

Man sollte nur bei den Datensätzen ein gewisses Schema
einhalten, um auch später wieder alles zu finden.

Ich hatte vor Jahren mal sowas gemacht und es funktionierte
prima.

H.Brill
XProfan X4 + FreeProfan

Nachricht bearbeitet (10.01.18 17:03)

Beitrag beantworten
 
 Re: Behandlung von Textdateien (Speicern/Laden/EditBox/Multiedit))
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   10.01.18 19:02

Hab mein Progrämmchen von damals gefunden :-)
 Declare String datei, name, ort, hobbys, Integer nr
 Declare Long p1, ende, zeile, lpos,  String p2
 Declare Handle Fenster, Grid, Edit1, Edit2, Edit3, Edit4, MEdit
 Declare Handle Btn1, Btn2, Btn3, Btn4, Btn5, Btn6
 Declare String spalten, E1, E2, E3, E4, ME
 
 spalten = "Name;0;120;Nummer;0;80;Ort;0;120;Hobbys;0;240"
 name = " "
 ende = 0
 datei = $AppDataDir +"Hobbys.ini"
 
 UserMessages $10
 
 Fenster = Create("Dialog", %DeskTop, "Adressbuch in Gridbox", 100, 100, 640, 500)
 Create("Text", Fenster, "Name   :", 10, 10, 70, 25)
 Create("Text", Fenster, "Nummer :", 10, 40, 70, 25)
 Create("Text", Fenster, "Ort    :", 10, 70, 70, 25)
 Create("Text", Fenster, "Hobbys :", 10, 100,70, 25)
 Edit1 = Create("Edit", Fenster, "", 80, 10, 240, 25)
 Edit2 = Create("Edit", Fenster, "", 80, 40, 60, 25)
 Edit3 = Create("Edit", Fenster, "", 80, 70, 240,25)
 Edit4 = Create("Edit", Fenster, "", 80,100, 360,25)
 Btn1  = Create("Button", Fenster, "Neuer DS", 520, 10, 80, 25)
 Btn2  = Create("Button", Fenster, "Laden",     520, 40, 80, 25)
 Btn3  = Create("Button", Fenster, "Drucken",   520, 70, 80, 25)
 Btn4  = Create("Button", Fenster, "Löschen",   520,100, 80, 25)
 Btn5  = Create("Button", Fenster, "Update DS", 520,130, 80, 25)
 Btn6  = Create("Button", Fenster, "Ende",      520,160, 80, 25)
 MEdit = Create("MultiEdit", Fenster, "Bemerkung", 10, 150, 420, 80)
 Grid  = Create("Gridbox",Fenster, spalten, 0,  10, 250, 560, 200)
 
 WhileNot ende
    WaitInput
    If Clicked(Btn1)
       Eingabe()
    ElseIf Clicked(Btn2)
       Ausgabe()
    ElseIf Clicked(Btn3)
       Drucken()
    ElseIf Clicked(Btn4)
       If GetState(Grid, zeile)
         LoescheSatz(zeile + 1)
       Else
         MessageBox("Kein Datensatz markiert !", "Fehler !", 0)
       EndIf
    ElseIf Clicked(Btn5)
        If GetState(Grid, zeile)
           E1 = GetText$(Edit1)
           E2 = GetText$(Edit2)
           E3 = GetText$(Edit3)
           E4 = GetText$(Edit4)
           ME = Translate$(GetText$(MEdit), Chr$(13) + Chr$(10), "|")
           UpdateSatz(zeile + 1)
        Else
           MessageBox("Kein Datensatz markiert !", "Fehler !", 0)
        EndIf
    ElseIf Clicked(Btn6)
       ende = 1
    EndIf
    If @Clicked(Grid) ' Eintrag in der Gridbox geklickt ?
       zeile = GetCurSel(Grid)
       If GetState(Grid, zeile)
          SetText Edit1, GetText$(Grid, zeile, 0)
          SetText Edit2, GetText$(Grid, zeile, 1)
          SetText Edit3, GetText$(Grid, zeile, 2)
          SetText Edit4, GetText$(Grid, zeile, 3)
          SetText MEdit, Translate$(ReadIni$(datei, zeile + 1, "Text1"), "|", Chr$(13) + Chr$(10))
       EndIf
    EndIf
    Case %UMessage = $10 : ende = 1
 EndWhile
 
 
 Proc Eingabe
 Declare Long pos
     E1 = GetText$(Edit1)
     E2 = GetText$(Edit2)
     E3 = GetText$(Edit3)
     E4 = GetText$(Edit4)
     ME = Translate$(GetText$(MEdit), Chr$(13) + Chr$(10), "|")
     If E1 <> ""
       pos = NeuerDatensatz(E1, E2, E3, E4, ME)
        Ausgabe()
        SelectString(Grid, -1, E1)
     Else
        MessageBox("Kein Name eingegeben !", "Fehler !", 0)
     EndIf
 EndProc
 
 
 Proc Ausgabe
 Declare Int x, y
 Declare String ds, l
 x = 5
 y = 3
 If FileExists(datei)
    p2 = ReadIni$(datei, "Datensätze", "Anzahl")
    p1 = Val(p2)
    ClearList
    If p1 > 0
       WhileLoop 1, p1
         E1 = ReadIni$(datei, Str$(&LOOP), "Name")
         E2 = ReadIni$(datei, Str$(&LOOP), "Nummer")
         E3 = ReadIni$(datei, Str$(&LOOP), "Ort")
         E4 = ReadIni$(datei, Str$(&LOOP), "Hobbys")
         l  = ReadIni$(datei, Str$(&LOOP), "Lösch")
         If l = "N"
            AddString(0, E1 + "|" + E2 + "|" + E3 + "|" + E4)
         EndIf
       EndWhile
       ClearList Grid
       Move("ListToHandle", Grid)
    Else
      MessageBox("Keine Sätze vorhanden !", "Hinweis !", 0)
    EndIf
 Else
    MessageBox(datei + " nicht gefunden !\nNeue Datei ohne\nEinträge geschrieben !", "Fehler !", 0)
    WriteIni datei, "Datensätze", "Anzahl", "0"
 EndIf
 
 EndProc
 
 
 Proc NeuerDatensatz
 Parameters String name, Long nr, String ort, hobbys, text
 Declare String anzahl, loesch, Long az, a
 If FileExists(datei)
    anzahl = ReadIni$(datei, "Datensätze", "Anzahl")
    az = Val(anzahl)
    a = 0
    If az > 1
       WhileLoop 1, az
        loesch = ReadIni$(datei, Str$(&LOOP), "Lösch")
        If loesch = "*"
           a = &LOOP
           Break
        EndIf
      EndWhile
    EndIf
    If a > 0
       az = a
    Else
       Inc az
       WriteIni datei, "Datensätze", "Anzahl", Str$(az)
    EndIf
 
    WriteIni datei, Str$(az), "Name", name
    WriteIni datei, Str$(az), "Nummer", Str$(nr)
    WriteIni datei, Str$(az), "Ort", ort
    WriteIni datei, Str$(az), "Hobbys", hobbys
    WriteIni datei, Str$(az), "Lösch", "N"
    WriteIni datei, Str$(az), "Text1", text
    Return az
 EndIf   
 EndProc
 
 Proc Drucken
 Declare Long a, y, x1, x2, x3, x4
 Declare String zeile
 x1 = 50
 x2 = 210
 x3 = 270
 x4 = 420
 y = 24
 ClearList
 Move("HandleToList", Grid)
 a = GetCount(0)
 If a > 1
    StartPrint "*MeinDokument"
    If %Printing
       DrawText x3, y , "Datensätze", 6
       Inc y, 24
       DrawText x1, y, "NAME", 0 : DrawText x2, y, "NR", 0
       DrawText x3, y, "WOHNORT", 0 : DrawText x4, y, "HOBBYS", 0
       Inc y, 24
       DrawText x1, y, MkStr$("-", 450)
       Inc y, 24
       WhileLoop 0, a - 1
          zeile = GetString$(0, &LOOP)
          DrawText x1, y, SubStr$(zeile, 1, "|") : DrawText x2, y, SubStr$(zeile, 2, "|")
          DrawText x3, y, SubStr$(zeile, 3, "|") : DrawText x4, y, SubStr$(zeile, 4, "|")
          Inc y, 24
       EndWhile
     EndPrint
    EndIf
 EndIf
 EndProc
 
 Proc LoescheSatz
 Parameters Long lp
    WriteIni datei, Str$(lp), "Lösch", "*"
    Ausgabe()
 EndIf
 EndProc
 
 Proc UpdateSatz
 Parameters Long lp
    WriteIni datei, Str$(lp), "Name", E1
    WriteIni datei, Str$(lp), "Nummer", E2
    WriteIni datei, Str$(lp), "Ort", E3
    WriteIni datei, Str$(lp), "Hobbys", E4
    WriteIni datei, Str$(lp), "Lösch", "N"
    WriteIni datei, Str$(lp), "Text1", ME
    Ausgabe()
 EndProc
 
 End
 


H.Brill
XProfan X4 + FreeProfan

Beitrag beantworten
 
 Re: Behandlung von Textdateien (Speicern/Laden/EditBox/Multiedit))
Autor: Markus Barkholz (---.unity-media.net)
Datum:   10.01.18 19:22

Hallo Heinz,

danke für die ausführliche Hilfe dazu. Mir gefällt die Variante als Ini-Datei ganz gut. Nicht weil Du deinen Code dazu beigetragen hast sondern wegen der Übersichtlichkeit und per Hanf könnte ich auch was dazu packen. Ausserdem habe ich mit Datenbanken jedweder Art noch überhaupt nichts gemacht und würde für längere Zeit auf dem Schlauch stehen. Die Serien-Nummern und Webseiten-Logins, eMail-Zugänge, etc. liegen zwar nicht im Tausenderbereich aber ich komme tatsächlich auf 476 LoginDaten, keys und was weis ich noch alles. Tztztz... was sich nicht so alles in den Jahren so ansammelt.

Ich werde mich dann mal daran machen. Damit mein Progrämmchen zum Abschluss kommt und mein vorerst größtes Projekt in Angriff nehmen kann:

Eine Wetterstation mit GPS, Helligkeit, Temp, Luftfeuchte, Druck, Regenmessung und Radioaktivität per AVR und SerialPort over USB. Vielleicht auch per Bluetooth. Das Ganze Batteriegepuffert und Speicherung der Messdaten auf SD oder eEproms. Mal sehen.....

Vielen Dank nochmal für die Hilfe

Beitrag beantworten
 
 Re: Behandlung von Textdateien (Speicern/Laden/EditBox/Multiedit))
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   11.01.18 16:38

Aha, du programmierst auch AVR's.
Hatte ich auch schon mal gemacht. Da ich aber nicht
gut löten kann (bin froh, zwei Drähte miteinander zu
verbinden), und mir auch die Elektronik-Kenntnisse
(was ist ein Kondensator, Widerstand usw.) fehlen,
ist es meist bei den Steckdrähten geblieben. Für nur
ein paar LED's blinken zu lassen, mal einen Sensor
auslesen, oder über RS232 was zu schicken/abholen,
ist es mit der Zeit auch langweilig.

Mein Bruder hatte vor ein paar Jahren noch einen
Augeninfarkt gehabt. Vorher konnte der mir ein paar
kleine Sachen auf Platine löten. Das geht jetzt auch
nicht mehr, ganz zu schweigen vom PCB-Löten (also
die Chips mit 80 Beinchen und mehr).

Jetzt habe ich da einen kleinen Karton voll Zeugs, das
ich nicht mehr verwende. Da wären z.B.
- zwei myAVR-Experimentierboards mit Programmer drauf
und Netzteil
- noch ein paar Ersatz - AVRs
- TTL- Pegelwandler zu 12 V
- ein paar Sensoren (Ultraschall, Temperatur usw.)
- 433 MHZ Radio-Module (Funk)
- zwei Bluethooth - Module (Class 1 = 100 Meter)
- kleine Zusatzplatinchen
- Eine Karte seriell mit 8 Schaltrelais von CONRAD
- etwas Hühnerfutter (Kondensatoren, Widerstände usw.)

Vielleicht kannst du ja was davon gebrauchen, bevor du
es irgendwo teuer kaufst. Auch gleich den ganzen Karton
zum Festpreis. Wenn man rechnet, sind die 4 Funkmodule
und die Relaisplatine schon 80 - 100 € wert.

Kannst ja hier mal Bescheid geben oder per Mail : H.Brill@t-online.de

H.Brill
XProfan X4 + FreeProfan

Beitrag beantworten
 
 Re: Behandlung von Textdateien (Speicern/Laden/EditBox/Multiedit))
Autor: Markus Barkholz (---.unity-media.net)
Datum:   11.01.18 21:35

Interessant! Also Beides... Du bist/warst also auch den kleinen Teilen verfallen?
Ich hatte damit mal eine Peltierkühlung für meine Wasserkühlung gebaut. Musste zeitweise Kühlflüssigkeit einfülen weil das Ding bei -18Grad lag + Prozessorwärme - effektiv dann bei +6-8Grad. Hab mir damit das MB kaputt gemacht. Hätte ich in der Schule besser aufgepasst wäre mir die Sache mit der Taupunktverschiebung eher aufgefallen - naja.

Ich Ätze auch meine Platinen selber. Layout auf Overheatfolie mit Laserdrucker drucken und dann ganz profan aufbügeln und Ätzen. SMD mit FlüssigLot 110° Scgmelztemp verwenden und mit SMD-Heißluftgerät einfach aufföhnen, fertig. Kein Geböhre und Gefummel. Das geht dann auch mit geringen Lötfertigkeiten ;-)

Aber zur Sache:
Dein Angebot ist interessant. Ich hoffe du willst das jetzt nicht sofort loswerden...Weihnachten war sehr teuer inkl. Sterbefall. Mit anderen Worten - ich bin deswegen erstmal komplett blank und warte auf Geldeingang und Steuerrückzahlung aus 2015/16. Ich warte jeden Tag darauf.

Ich denke da an das Rundum Sorglos Packet. Wie wäre denn Deine preisliche Vorstellung dafür?

M.Barkholz

Beitrag beantworten
 
 Re: Behandlung von Textdateien (Speicern/Laden/EditBox/Multiedit))
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   12.01.18 04:22

Ich denke, daß ich da mit 100 € + Versand hinkomme.
Dann sind halt ein paar Kleinigkeiten umsonst dabei.
Solche Sensoren, wie Temperatur usw. sind ja Pfennigkram.
Diese Kleinteile würde ich dann gar nicht berechnen und
einfach so beilegen. Und die kleinen Platinchen (TTL-Wandler usw.)
natürlich auch.

H.Brill
XProfan X4 + FreeProfan

Nachricht bearbeitet (13.01.18 07:24)

Beitrag beantworten
 
 Re: Behandlung von Textdateien (Speicern/Laden/EditBox/Multiedit))
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   13.01.18 07:34

Hab da auch noch 1 BT/SER. - Modem rumliegen. Die gab es mal
vor ein paar Jahren bei Pollin für 1 € zum Ausschlachten :
http://www.pollin.de/shop/dt/ODM1NzcyOTk-/Computer_und_Zubehoer/Netzwerktechnik/Modems_Netzwerkkarten/Bluetooth_Modem_HB300.html
Da sind alleine schon die PRINT-Anschlüsse (RJ45, 9pol. Ser.,
Stromversorgung) den Euro wert. Das ganze Innenleben wie
Bluethooth, usw. + Antenne sind umsonst.
Das Strom-Kabel ist natürlich nicht dabei.
Das würde ich dir auch umsonst noch dazu legen.
Außerdem ist da noch ein zweizeiliges LCD-Display
von myAVR dabei.
PS :
Kennst du auch dieses Forum ?
https://www.mikrocontroller.net/forum/mikrocontroller-elektronik
Dort gibt es auch sehr viele Infos.

H.Brill
XProfan X4 + FreeProfan

Nachricht bearbeitet (14.01.18 09:09)

Beitrag beantworten
 Foren-Liste  |  Baumstruktur   Neuerer Beitrag  |  Älteres Thema 


 Foren-Liste  |  Zur Registrierung 
 Benutzerlogin
 Benutzername:
 Passwort:
 Login-Daten speichern:
   
 Passwort vergessen?
E-Mail-Adresse oder Username unten eingeben. Dann wird Dir per e-Mail ein neues Passwort zugeschickt.

phorum.org