Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Datei öffnen, datei filtern, Datei speichern

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
cacare



Anmeldungsdatum: 24.10.2007
Beiträge: 4
Wohnort: obertshausen

BeitragVerfasst am: 07.10.2010, 20:39    Titel: Datei öffnen, datei filtern, Datei speichern Antworten mit Zitat

Hallo habe folgendes Problem Problem:

Habe eine Text-Datei, die wie nachfolgend beschrieben aussieht:

******************************************************
hasshsdskj*********************************************
***********************1235424************************

100512 1410 xxxx xxxx xxxx 3811 271701 -5.99 -6.68 -0.69
100512 1200 xxxx xxxx xxxx 8410 271701 -15.99 -6.68 -0.69
100512 1410 xxxx xxxx xxxx 3811 271701 -145.99 -6.68 -0.69
100512 1200 xxxx xxxx xxxx 9211 271701 -9.99 -6.68 -0.69
100512 1410 xxxx xxxx xxxx 3811 271701 -5.99 -6.68 -0.69

Allerdings ist diese Datei mehrere hundert Seiten lang.

Ich möchte jetzt folgendes tun:

Das einzige was ich aus dieser Datei brauche, sind die Zeilen die "1200" enhalten, der Rest in unwichtig.

Kann mir da jemand helfen ?

Wäre Super..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 07.10.2010, 21:43    Titel: Antworten mit Zitat

Datei öffnen, Zeile für Zeile auslesen und mit INSTR nach dem "1200" suchen. Wenn das "1200" immer genau an dieser Position sein soll, würde ich stattdessen MID(zeile$, 8, 4) nehmen.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Lutz Ifer
Grillmeister


Anmeldungsdatum: 23.09.2005
Beiträge: 555

BeitragVerfasst am: 08.10.2010, 17:44    Titel: Antworten mit Zitat

Code:
grep 1200 dateiname

_________________
Wahnsinn ist nur die Antwort einer gesunden Psyche auf eine kranke Gesellschaft.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 08.10.2010, 19:02    Titel: Antworten mit Zitat

Hallo,

in FreeBASIC könnte man das z. B. so lösen:
Code:
'Einstellung der Dateinamen:
Const Quelldatei = "AlleDatensaetze.txt" '<= Datei mit allen Zeilen
Const Zieldatei = "Suchergebnis.txt"     '<= Datei mit gefundenen Treffern. Wird neu angelegt.

Dim As Integer Anzahl = 0
Dim As String Zeile, Zahl

Open Quelldatei For Input As #1
Open Zieldatei For Output As #2

Do Until Eof(1)
    Line Input #1, Zeile
    If Len(Zeile) > 12 Then 'nur Zeilen mit einer Laenge von mehr als 12 Zeichen beachten
        Zahl = Mid(Zeile,8,4)  'Teilstueck aus der Zeile herausschneiden: Beginnend mit dem 8. Zeichen und 4 Zeichen lang
        If Zahl = "1200" Then 'Zeile entspricht dem Schema "?????? 1200 ..."
            Print Zeile 'Zeile auf Bildschirm ausgeben
            Print #2, Zeile 'Zeile in Ergebnisdatei schreiben
            Anzahl += 1 'Zaehler um 1 erhoehen
        End If
    End If
Loop

Close #2
Close #1

Print
Print "---"
' Anzahl der gefundenen Zeilen ausgeben:
Print "Es wurden " & Anzahl & " passende Zeilen gefunden. Beliebige Taste zum Beenden druecken."
Sleep

End 0


Alternativ könnte man natürlich auch die vielseitige Standardsoftware grep benutzen, die Lutz Ifer vorgeschlagen hat. grep für Windows kann man hier herunterladen: http://gnuwin32.sourceforge.net/packages/grep.htm Benötigt werden die beiden ZIP-Archive "Binaries" und "Dependencies". Aus diesen beiden Archiven werden jeweils nur die Dateien aus den bin-Unterordnern benötigt (EXE- und DLL-Dateien).

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 08.10.2010, 19:35    Titel: Antworten mit Zitat

Sebastian hat Folgendes geschrieben:
Alternativ könnte man natürlich auch die vielseitige Standardsoftware grep benutzen, die Lutz Ifer vorgeschlagen hat. grep für Windows kann man hier herunterladen: http://gnuwin32.sourceforge.net/packages/grep.htm Benötigt werden die beiden ZIP-Archive "Binaries" und "Dependencies". Aus diesen beiden Archiven werden jeweils nur die Dateien aus den bin-Unterordnern benötigt (EXE- und DLL-Dateien).
Nebenbei bemerkt liegt Windows seit XP oder Vista auch das nette Programm "findstr" bei, das fast genau so funktioniert wie grep.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 08.10.2010, 19:46    Titel: Antworten mit Zitat

Jojo hat Folgendes geschrieben:
Nebenbei bemerkt liegt Windows seit XP oder Vista auch das nette Programm "findstr" bei

Nicht erst da. zwinkern



BTW, mir ist gerade aufgefallen, dass der Threadstarter ja eigentlich im QBasic-Forum gepostet hat und nicht im FreeBASIC-Bereich... neutral Naja, jetzt hat er halt eine FreeBASIC-Code-Variante. grinsen
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 08.10.2010, 19:56    Titel: Antworten mit Zitat

puh, so lang schon? auch ohne service pack? happy zumindest bei 9x war das glaub ich nicht dabei.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Andy19312



Anmeldungsdatum: 22.10.2005
Beiträge: 428

BeitragVerfasst am: 26.10.2010, 23:31    Titel: Antworten mit Zitat

Hab zwei Programmiercodes parat....


Version 1:
Liest deine Datei ein, schaut bei jeder Zeile danach, ob 1200 vorkommt und gibt es beim Screen aus

Code:

dim text as string

open "deine_datei.txt" for input as #1
do
input #1, text
if instr(text,"1200") > 0 then
    print text
end if

loop until eof(1)
close #1



Version 2:
Liest deine Datei ein, schaut bei jeder Zeile danach, ob 1200 vorkommt und gibt es beim Screen aus, jedoch speichert er auch den entsprechenden Zeileninhalt mit 1200 Zeile für Zeile in die Datei "deine_datei_gefiltert.txt" ab.

Wenn du das Programm nochmal ausführst, musst du jedoch die Datei deine_datei_gefiltert.txt löschen, da ich append verwende.

Code:

dim text as string

open "deine_datei.txt" for input as #1
open "deine_datei_gefiltert.txt" for append as #2
do
input #1, text
if instr(text,"1200") > 0 then
    print text
    print #2, text
end if

loop until eof(1)
close #1
close #2


Es geht aber auch umständlicher:


Code:

dim text as string
dim i as integer
open "deine_datei.txt" for input as #1
do
input #1, text
for i = 1 to len(text)
    if mid(text,i,1) = "1" and mid(text,i+1,1) = "2" and mid(text,i+2,1) = "0" and mid(text,i+3,1) = "0"then
    print text
    end if
next
loop until eof(1)
close #1


oder

Code:


dim text as string
dim i as integer
open "deine_datei.txt" for input as #1
open "deine_datei_gefiltert.txt" for append as #2
do
input #1, text
for i = 1 to len(text)
    if mid(text,i,1) = "1" and mid(text,i+1,1) = "2" and mid(text,i+2,1) = "0" and mid(text,i+3,1) = "0"then
    print text
    print #2, text
    end if
next
loop until eof(1)
close #1
close #2
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz