 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
cacare
Anmeldungsdatum: 24.10.2007 Beiträge: 4 Wohnort: obertshausen
|
Verfasst am: 07.10.2010, 20:39 Titel: Datei öffnen, datei filtern, Datei speichern |
|
|
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 |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 07.10.2010, 21:43 Titel: |
|
|
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 |
|
 |
Lutz Ifer Grillmeister

Anmeldungsdatum: 23.09.2005 Beiträge: 555
|
Verfasst am: 08.10.2010, 17:44 Titel: |
|
|
Code: | grep 1200 dateiname |
_________________ Wahnsinn ist nur die Antwort einer gesunden Psyche auf eine kranke Gesellschaft. |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 08.10.2010, 19:02 Titel: |
|
|
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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 08.10.2010, 19:35 Titel: |
|
|
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 |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 08.10.2010, 19:56 Titel: |
|
|
puh, so lang schon? auch ohne service pack? 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 |
|
 |
Andy19312
Anmeldungsdatum: 22.10.2005 Beiträge: 428
|
Verfasst am: 26.10.2010, 23:31 Titel: |
|
|
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 |
|
 |
|
|
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.
|
|