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:

Zahlen von bestimmter Stelle in der Datei auslesen

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



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 05.02.2012, 01:59    Titel: Zahlen von bestimmter Stelle in der Datei auslesen Antworten mit Zitat

Ich habe in einer Textdatei mehrere untenstehende Sätze drin (14 oder 30):

Code:
6.   Müller,Daniel      M   1900   1769   8.5   7.56   13   28   /   15   1879      1918   18

Wie kann ich es so programmieren, dass ich nur bestimmte Werte auslese?
Zum Beispiel die Zahl 1918?
In der Datei sind mehrere Sätze drin und ich möchte von jedem Satz eine bestimmte Zahl auslesen.
Probleme machen mir die Leerzeichen.
Zweites Problem ist, dass die erste Zeile so aussieht:
Zitat:
Inoffizielle Turnierauswertung nach D W Z


zweite Zeile so:
Code:
Nr.   Teilnehmer   Tit.   Att.   Ro   Niv   W   We   n   E   /   J   Rh   X   Rn   Diff.


Ich weiß nicht wie ich an die Zahlen in der Datei ran komme.

Gruß
ALWIM
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 05.02.2012, 13:02    Titel: Antworten mit Zitat

Nach dem, was du gepostet hast, könntest du alle Zeilen überspringen, bei denen am Anfang keine Zahl steht..
ist am Anfang eine Zahl, mußt du den String splitten, und dann kannste über den Index auf die gewünschte Zahl zugreifen,
wenn Instr() oder InstrRev() nicht ausreichen..
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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
C3lt1c



Anmeldungsdatum: 22.01.2012
Beiträge: 15

BeitragVerfasst am: 05.02.2012, 13:25    Titel: Antworten mit Zitat

Servus. Hab dir mal auf die schnelle was gecodet.

Quick and Dirty Zunge rausstrecken

Code:

Type toExplode
  Const version = 2.02

  array  As String Ptr
  csv    As String
  lenght As UShort

  Declare Sub split (ByVal Istring As String, ByVal Isep As String)
End Type





Dim zeilen_data As String
zeilen_data = "6.   Müller,Daniel      M   1900   1769   8.5   7.56   13   28   /   15   1879      1918   18"

Dim zeilen_data_split As toExplode
Dim array_size As Integer


zeilen_data_split.split(zeilen_data," ")

For a As Integer = 0 To zeilen_data_split.lenght -1
   
    If zeilen_data_split.array[a] = "" Then
    Else
        array_size += 1    
    EndIf

Next

Dim split_array(array_size+1) As String
Dim array_pointer As Integer

For a As Integer = 0 To zeilen_data_split.lenght -1
   
   If zeilen_data_split.array[a] = "" Then
   Else
      split_array(array_pointer) = zeilen_data_split.array[a]
      array_pointer += 1
   EndIf
Next


'Über split_array(index) kannst du auf die daten zugreifen
'

For i As Integer = 0 To array_size - 1
   Print split_array(i)
Next




Sleep
End








Sub toExplode.split (ByVal Istring As String, ByVal Isep As String)
/'
  Ergebnis : Formatiert einen CSV String =>
             Beispiel       
             csv := "ab;abc;abcd" => csv := chr(2)+"ab"+chr(3)+"abc"+chr(4)+"abcd"
               Länge String 1         --------+     |     |     |      |      |
               String 1               --------------+     |     |      |      |
               Länge String 2         --------------------+     |      |      |
               String 2               --------------------------+      |      |
               Länge String 3         ---------------------------------+      |
               String 3               ----------------------------------------+
                                       
  Aufruf   : toExplode.split("ab;abc;abcd",";")
  Variable : a=Laufvar.; str_len=Länge des Strings;ct=Länge Teilstring&akteller Arrayeintrag
             items=Länge des Vektors; dummy=DummyString; Istring=Eingangsstring; Isep=Seperator
'/


  Dim a       As UShort  'Laufvariable
  Dim b       As UShort
  Dim str_len As UShort  'Länge des Strings
  Dim ct      As UShort  'Länge Teilstring
  Dim items   As UShort  'Anzahl der Arrayeinträge
  Dim dummy   As String = Istring 'dummy

  str_len  = Len(dummy)
  items Xor= items

  For a = 0 To str_len - 1
       b = str_len-a
      If Mid(dummy,b,1) = Isep Then
         Mid(dummy,b,1) = Chr(ct)
           ct          Xor= ct
           items         += 1
      Else
           ct            += 1
      EndIf
  Next a
  dummy       = Chr(ct) + dummy
  This.lenght = items + 1
  This.csv    = dummy

  This.array  = Callocate (SizeOf(String) * This.lenght)
  ct       Xor= ct


  For a = 0 To str_len - 1
     This.array[ct] = Mid(dummy,2+a,dummy[a])
     a += dummy[a]
     ct += 1
  Next a

End Sub



Gruss C3lt1c
_________________
+++Chars are my Color and Codes my Art+++

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 05.02.2012, 16:16    Titel: Antworten mit Zitat

Ich habe den C3lt1c-Code zu Testzwecken mal etwas aufgräumt und zeitraubende Mid()-Aufrufe entfernt..
Für dies Beispiel funktioniert es jedenfalls..
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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 05.02.2012, 23:32    Titel: Antworten mit Zitat

Danke für die Antworten.

Wie ich den Quellcode letztendlich verwende, weiß ich noch nicht.
Meine Idee funktioniert noch nicht so ganz.
Mit dem Auslesen ist nicht getan. Ich muss das ganze ja auch wieder speichern.

Gruß
ALWIM
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
C3lt1c



Anmeldungsdatum: 22.01.2012
Beiträge: 15

BeitragVerfasst am: 06.02.2012, 09:27    Titel: Antworten mit Zitat

ALWIM hat Folgendes geschrieben:
Danke für die Antworten.

Wie ich den Quellcode letztendlich verwende, weiß ich noch nicht.
Meine Idee funktioniert noch nicht so ganz.
Mit dem Auslesen ist nicht getan. Ich muss das ganze ja auch wieder speichern.

Gruß
ALWIM


Speichern sollte doch eigentlich kein Problem darstellen ?!?
Freebasic bietet ja Funktionen mit dennen das einfach umzusetzen ist.

Nun kommt es drauf an wie dein Output aussehen sollte!
Du könntest entweder normal mit [Spaces] arbeiten oder falls du es als
Real Tabelle brauchst die du in MS Excel oder OO Calc Importieren willst einfach
nur aufs [CSV] - Format zurück greifen indem du einfach als Trennzeichen ";" benutzt.

Gruss C3lt1c
_________________
+++Chars are my Color and Codes my Art+++

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 09.02.2012, 22:08    Titel: Antworten mit Zitat

Code:
Dim zeilen_data As String
zeilen_data = "6.   Müller,Daniel      M   1900   1769   8.5   7.56   13   28   /   15   1879      1918   18"



Kann man den Quellcode so ändern, dass er alle Zeilen in einer Datei wie diese oben angegebene einliest? Ich habe versucht dass das Programm alle Zeilen einer Test.dat einliest aber bekomme immer was falsches bzw. eine Fehlermeldung zurück. Er liest im Moment immer nur diese eine Zeile ein.

Das ganze zu speichern ist kein Problem für mich. Da habe ich schon eine Idee bzw. mir damals einen Quellcode gebastelt.

(Das ganze soll natürlich wieder so gespeichert werden wie es eingelesen wurde!)

Gruß
ALWIM
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 09.02.2012, 22:16    Titel: Antworten mit Zitat

ALWIM hat Folgendes geschrieben:
Kann man den Quellcode so ändern, dass er alle Zeilen in einer Datei wie diese oben angegebene einliest?

Ja, kann man. Das ist ja nur eine Demo-Zeile, um den Code zu testen bzw. zu demonstrieren.

Siehe zweites Beispiel.
_________________
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
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. 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