Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 05.02.2012, 01:59 Titel: Zahlen von bestimmter Stelle in der Datei auslesen |
|
|
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 |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 05.02.2012, 13:02 Titel: |
|
|
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 |
|
 |
C3lt1c

Anmeldungsdatum: 22.01.2012 Beiträge: 15
|
Verfasst am: 05.02.2012, 13:25 Titel: |
|
|
Servus. Hab dir mal auf die schnelle was gecodet.
Quick and Dirty
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 |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 05.02.2012, 16:16 Titel: |
|
|
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 |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 05.02.2012, 23:32 Titel: |
|
|
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 |
|
 |
C3lt1c

Anmeldungsdatum: 22.01.2012 Beiträge: 15
|
Verfasst am: 06.02.2012, 09:27 Titel: |
|
|
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 |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 09.02.2012, 22:08 Titel: |
|
|
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 |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 09.02.2012, 22:16 Titel: |
|
|
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 |
|
 |
|