Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
CProof
Anmeldungsdatum: 01.06.2006 Beiträge: 9
|
Verfasst am: 26.07.2006, 14:13 Titel: Zeilenumbrüche aus Datei importieren? |
|
|
Mein Problem: Ich arbeite an einem Verschlüsselungsprogramm und möchte die zu codierenden Texte aus einer Textdatei importieren.
Solange alles in einer Zeile ist kann ich es mit
Code: |
open "text.txt" as #1
und dann nach dem input mit
aktuelleszeichen$=mid(text$,position,1)
|
das aktuelle zeichen auslesen.
Das funktioniert bei allen Zeichen, auch bei Leerzeichen und Sonderzeichen.
Danach versuche ich den Zeichen einen Wert zuzuweisen:
Code: |
if aktuelleszeichen$ = "A" then aktuellerwert = 1
if aktuelleszeichen$ = "B" then aktuellerwert = 2
|
Und wie soll ich hier einen Zeilenumbruch auslesen?
Danke für eure Hilfe! |
|
Nach oben |
|
 |
A.K.

Anmeldungsdatum: 02.05.2005 Beiträge: 467 Wohnort: HH
|
Verfasst am: 26.07.2006, 14:38 Titel: |
|
|
Hi,
du könntest anstatt INPUT -> LINE INPUT nehmen.
Bei INPUT hast du zusätzlich zum Zeilenende noch das Problem das auch Kommas verschlungen werden.
LINE INPUT hört erst an einem EOL-Zeichen auf. CHR$(10).
Das heißt hinter jeder eingelesenen Zeile mit LINE INPUT kann man davon ausgehen das ein CHR$(10) und CHR$(13) existiert.
Ausser es handelt sich um die letzte Zeile. Dann ist dort keins vorhanden.
MFG A.K. _________________
http://forum.IconSoft.de
http://www.pnpbb.de - hol dir jetzt dein eigenes kostenloses Forum *NEU* |
|
Nach oben |
|
 |
CProof
Anmeldungsdatum: 01.06.2006 Beiträge: 9
|
Verfasst am: 26.07.2006, 15:50 Titel: |
|
|
Erst mal Danke für die schnelle Hilfe!!
das heißt -> ich könnte mit Line Input ALLE Zeichen übernehmen, inklusive Kommas.
Und Line Input # stoppt die Aufnahme nach jedem Enter?
Die Probleme, die ich noch habe:
-) Wie kann ich in der Input-Textdatei die Anzahl der Zeilen erfassen und mit line input # auswählen, welche Zeile ich nehmen soll?
Gibt es hier so eine Befehls-Gruppierung wie LEN (Zur Längenerfassung) und MID (Auslesen eines Zeichens)? Ich bräuchte das ganze dann nämlich auch noch in der Horizontale für Anzahl der Zeilen erfassen und Zeile auswählen und in einen String speichern.
-) Was mache ich bei Umlauten? Meine Codierung versteht unter ü was anderes als FB. |
|
Nach oben |
|
 |
A.K.

Anmeldungsdatum: 02.05.2005 Beiträge: 467 Wohnort: HH
|
Verfasst am: 26.07.2006, 16:05 Titel: |
|
|
Hi,
zu 1.
Ja, alle Zeichen die einen ASCII-Wert >31 haben werden mit eingelesen.
zu 2.
Dafür gibt es im Input-Modus keinen direkten Befehl. Dort müßtest du alles Zeile per Zeile einlesen und evtl. in einem Array zwischenspeichern etc.
Dazu am besten mal den folgenden Beitrag anschauen:
http://forum.qbasic.at/viewtopic.php?t=2906
zu 3.
Jep, ANSII, ASCII und was es nicht noch alles gibt.
Am besten gar nicht mit "Ü", "Ä" etc arbeiten sondern mit den direkten ASCII-Werten.
Ich mein das so:
Code: |
if aktuelleszeichen$ = chr$(65) then aktuellerwert = 1
if aktuelleszeichen$ = chr$(66) then aktuellerwert = 2
|
Dabei ist es völlig egal ob das Zeichen mit dem Ascii-Wert 65 nun ein "A" ist oder ein "Ü". Du mußt nur alle Werte abdecken. Dies ist am einfachsten zu lösen indem du einfach einen Berechnung zugrunde legst der alle ASCII-Werte bearbeitet egal welche es sind.
Beispiel dafür wäre z.B. zu jedem eingelesenen Wert einfach 10 dazuzuzählen.
MFG A.K. _________________
http://forum.IconSoft.de
http://www.pnpbb.de - hol dir jetzt dein eigenes kostenloses Forum *NEU* |
|
Nach oben |
|
 |
CProof
Anmeldungsdatum: 01.06.2006 Beiträge: 9
|
Verfasst am: 26.07.2006, 16:20 Titel: |
|
|
Die Anzahl der Zeilen könnte ich ja so bestimmen:
Code: |
open "text.txt" for INPUT as #1
anzahlzeilen=0
do until EOF (1)
anzahlzeilen = anzahlzeilen +1
loop
|
Dann hätt ich in anzahlzeilen die Anzahl der Zeilen.
Doch nun verschlüsselt mein Programm Buchstabe für Buchstabe.
Und da sollte ich, wenn die erste Zeile zu Ende ist, irgendwie über Line Input #1 die zweite Zeile laden können, wie schaff ich das? |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 26.07.2006, 18:48 Titel: |
|
|
Hi CProof,
so könnte dein Ver-/Entschlüsselungsprogramm aussehen(Ausschnitt).. Code: | Option Explicit
Option Dynamic
Dim DateiNr, i, DateiName As String, Zeile$
DateiName="text.txt"
DateiNr=FreeFile
Open DateiName For Input As #DateiNr
AnzahlZeilen=0
Do Until Eof(DateiNr)
ReDim Preserve Datei(AnzahlZeilen)
Line Input #DateiNummer, Zeile$
Datei(AnzahlZeilen)=Encode(Zeile$)
anzahlzeilen+=1
Loop
Close(DateiNr)
?"Datei ";DateiName; " eingelesen(";AnzahlZeilen;" Zeilen) und entschlüsselt.."
'..
Open DateiName For Output As #DateiNr
For i=0 To AnzahlZeilen-1
Write #DateiNummer, Decode(Datei(i))
Next StepInLoop
Close(DateiNr)
?"Datei ";DateiName; " verschlüsselt und geschrieben.." | Solltest du noch mehr Code benötigen,
zögere nicht, dich an meine Geschäftstelle zu wenden zwecks Honorarvereinbarung
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
CProof
Anmeldungsdatum: 01.06.2006 Beiträge: 9
|
Verfasst am: 26.07.2006, 21:53 Titel: |
|
|
@ytwinky: Danke, aber ich mach das Programm nach meiner Methode, da kenn ich mich aus und es kostet micht nichts.
Eine Frage noch:
Wenn ich einen Text mit
drucke, dann erzeugt fb noch viele Leerzeichen und einen Zeilenumbruch in meiner Datei. Mein Programm wertet Leerzeichen jedoch auch als Zeichen und somit habe ich Chaos bei der Dechiffrierung. Wie kann ich diese Leerzeichen unterdrücken? |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 26.07.2006, 22:24 Titel: |
|
|
Leerzeichen kannst du mit LTrim oder RTrim entfernen.
(Diese Befehle sowie viele andere auch, um nicht zu sagen alle , werden in der Befehlsreferenz beschrieben. Sie kostet nix, lediglich ein wenig Zeit zum Download und zum drin Lesen. Für Fehler in der CHM gibts sogar einen eigenen Thread!).
LF am Ende lassen sich durch Anfügen von ';' vermeiden, aber ich schätze, daß deine Datei dann unlesbar wird, weil kein Zeilenende mehr gespeichert wird
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 27.07.2006, 09:26 Titel: |
|
|
Du kannst sonst auch Byteweisse zugreifen.
Code: | dim a as ubyte
dim lang as uinteger
Input " Name der Datei? ", file1$
Input " Name der anderen Datei? ",file2$
open file1$ for binary as #1 'Die Exe Datei öffnen
open file2$ for binary as #2 'Die andere Datei öffnen
do
get #2,,a
a = a xor 5
put #1,,a
loop until eof(2)
sleep |
Zuerst Zieldatei und dann die Datei die Verschlüsselt werden soll eingeben. _________________ http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight |
|
Nach oben |
|
 |
|