Paules-PC-Forum.de Anzeige:

Microsoft Windows Intune: PC-Verwaltung und -Sicherheit in der Cloud: Updateverwaltung, Anti-Virus und vieles mehr!


Zurück   Paules-PC-Forum.de > Programmierung > XProfan

XProfan Alles rund um die Programmiersprache XProfan.

EM-Tippspiel

Paule bei Facebook


Paule bei Twitter


Letzte Forenthemen
Gehe zum ersten neuen Beitrag Algorithmen Teil IV...
Aufrufe: 3361, Antworten: 129
Gehe zum ersten neuen Beitrag Hamachi deinstallieren
Aufrufe: 58, Antworten: 5
Gehe zum ersten neuen Beitrag Bundesliga-Tippspiel Saision...
Aufrufe: 7670, Antworten: 187
Gehe zum ersten neuen Beitrag PPF - Spiel "Wörter weiter...
Aufrufe: 26970, Antworten: 4223
Gehe zum ersten neuen Beitrag PPF - Shoppingwahn
Aufrufe: 50963, Antworten: 1397
Gehe zum ersten neuen Beitrag Pc lahmt plötzlich
Aufrufe: 186, Antworten: 6
Gehe zum ersten neuen Beitrag PC fährt nicht mehr hoch.
Aufrufe: 0, Antworten: 0
Gehe zum ersten neuen Beitrag Von Live CD Windowspfad...
Aufrufe: 329, Antworten: 19
Gehe zum ersten neuen Beitrag Captur 2.2 (Snow Leo)
Aufrufe: 28, Antworten: 0
Gehe zum ersten neuen Beitrag Captur 2.3 (Lion)
Aufrufe: 34, Antworten: 0
Zeige:





Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 14.07.2011, 22:37   #1 (Direktlink)
Weiß worum´s geht
 
Benutzerbild von JörgG
 
Registriert seit: 08.12.2009
Ort: Mecklenburg
Beiträge: 202
Standard db("go"....) -Problem

Hallo zusammen, ich brauche ein wenig Hilfe von unseren DBaseIII-Spezialisten
habe eine .dbf mit 2 Feldern & ca. 20000 unsortierten Datensätzen
auf das 2. Feld habe ich deshalb einen Index gelegt, um schneller suchen zu können. Von allen Datensätzen, die dem Suchkriterium im 2. Feld entsprechen, soll das 1. Feld ausgelesen & in eine Stringliste gespeichert werden.
Was mich aber seit Stunden verrückt macht ist, daß der DatensatzZeiger in der Such-Schleife nach dem 1. Treffer nicht weiterrückt. Ich kann machen was ich will, sämtliche db("go",..)-Varianten habe ich geprobt - Nichts!
Zur Kontrolle habe ich die momentane Trefferposition ausgeben lassen, daran sieht man deutlich, daß immer wieder die selbe Zeile gefunden wird. Aber warum?
Der Code ist sofort laufähig, die Tabelle muß direkt im ProgVerz. stehen:
2 Felder, beide Text, 1x8 & 1x22 Zeichen - Ich würde sie auch bei Bedarf zum Testen zusenden
Code:
' testprog zum suchen in einer indizierten dbaseIII
Proc tsuche
'sucht alle nummern aus test.dbf, die mit 02 beginnen schreibt diese nummern in die stringliste ml&
  Declare tr%, ml&
  ml& = @Create("list",0) 'stringliste  für die aufnahme der gefundenen texte erstellen
  @db("Open", #1,"test.dbf") ' test.dbf als #1 öffnen   
  @db("Use", #1) 'test.dbf aktivieren  
  @db("CreateIndex", "NUM", "testnum") 'indexdatei für feld 2 NUM(22stelliges Textfeld)
  @Db("index", "testnum") 'indexdatei aktivieren  
  @db("Go", "*",1) 'zeiger auf 1. datensatz  
  tr% = 0 'position in tabelle bei treffer
  tr% = @db("find","02",0) 'im NUM nach den ersten 2 zeichen suchen, die mit 02 beginnen
  While tr% > 0 'löppt solange tr% nicht 0, also die 02 gefunden wird       
    AddString(ml&, @db("getfield",1)) ' feld 1 (text) auslesen) & der stringliste hinzufügen
    locate 2,2 ' zur demonstration trefferpositionen anzeigen lassen
    print tr%   
    @db("Go", "INDEX", tr% + 1) 'zeiger auf nächsten datensatz   
    tr% = @db("find","02",0) 'ab dieser pos. nach der nächsten nr. die mit 02 beginnt suchen
  EndWhile
  @dbclose(#1)
  Print "Suche beendet"
  tr% = @GetCount(ml&)  
  if tr% > 0 'wenn mindestens eine nr. gefunden wurde 
  Assign #1, "02.txt" 'zugriffsnummer für 02.txt
  Rewrite #1 'datei zum schreiben öffnen
  WhileLoop 0, tr% 'löppt die anzahl der gefundenen nummern durch       
    Print #1, @GetString$(ml&,&loop) 'aktuellen text in die textdatei schreiben
  EndWhile
  Close #1
EndProc

cls
tsuche
print
print "           *** Zum Beenden beliebige Taste drücken *** "
waitkey
end
Danke & Gruß
Jörg
edit: Feld 1 heißt TXT & Feld 2 NUM
JörgG ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 15.07.2011, 01:53   #2 (Direktlink)
Stammuser
 
Registriert seit: 04.04.2009
Ort: Lübeck
Beiträge: 264
Standard

Eine Gruppenwahl würde ich wie folgt vornehmen:
Code:
'....nach Feld "NUM" indiziert, NUM-Typ=C

If dbFind("02",0)>0
  WhileLoop &dbRecCount ' mehr kann es nicht sein
    If left$(trim$(@db("Get", "NUM")),2)="02"
      'AddString(%,$) oder was auch immer
      Else
      BREAK ' da indiziert, kann keine weitere "02" kommen
    EndIf
    dbGo("NEXT")
    case %dbEoF=1:BREAK
  EndWhile
EndIf
Gruß Thomas
THFR ist offline   Mit Zitat antworten
Alt 15.07.2011, 13:57   #3 (Direktlink)
Weiß worum´s geht
 
Benutzerbild von JörgG
 
Registriert seit: 08.12.2009
Ort: Mecklenburg
Beiträge: 202
Standard

Jo DankeThomas, deine Methode haut hin
Habe die Schleife noch ein wenig eingekürzt, löppt 'n Ticken schneller:
Code:
'....nach Feld "NUM" indiziert, NUM-Typ=C
If db("Find","02",0) > 0
  While left$(@db("Get", "NUM"),2)="02" 'ist jetzt Laufbedingung, spart die If-Abfrage
     'AddString(%,$) oder was auch immer
      db("Go", "NEXT") 'zeiger auf nächsten datensatz   
  EndWhile
EndIf
@trim$ brauch in diesem Fall nicht, weil ich genau weiß, daß es in diesem Feld nie führende Leerzeichen gibt.
%dbEoF in diesem Fall deshalb nicht, weil ich genau weiß, daß in diesem Feld immer eine Nummer gibt die höher beginnt als mit 02, zB. 03, 05 usw
Ist also gelöst - Danke!
Dann habe ich die Funktion db("find"....) aber völlig mißverstanden und db("go",...) wohl auch. Werd mal die Lehrbücher öfter zu Rate ziehen...
Gruß Jörg

Geändert von JörgG (15.07.2011 um 14:30 Uhr)
JörgG ist offline   Mit Zitat antworten
Antwort

  Paules-PC-Forum.de > Programmierung > XProfan

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
"HotFixInstallerUI.dll" und "eula.rtf" nach Update / Jetzt externe Festplatte defekt Maliana Viren-Forum 3 01.12.2009 16:57
Hab da ein Problem mit "JFritz" und "Filzip&q Jupp Software - Allgemein 0 19.10.2006 21:55
Problem nach Installation von "NetPumper"/"An -Iron- Windows XP 0 26.08.2005 00:40
"Hilfe"... "Senden an"Desktop"-Verl Bluebear Windows XP 2 25.05.2005 02:22



Alle Zeitangaben in WEZ +2. Es ist jetzt 12:47 Uhr.


Powered by vBulletin® Version 3.8.7 (Deutsch)
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Powered by vBCMS® 2.7.0 ©2002 - 2012 vbdesigns.de
(c) Paules-PC-Forum.de

::: Impressum :::

Search Engine Optimization by vBSEO 3.3.2