Zum Inhalt springen

VBScript: Suchfunktion erstellen??!


Empfohlene Beiträge

Geschrieben

Brauche schnelle Hilfe:

Ich habe folgende Aufgabe, ich soll mit VBScript ein Adresssystem programmieren wo man erst seinen Namen und Adresse eingibt (inputbox). OK das hab ich :)

Dann soll jeweils aber geprüft werden ob auch Daten eingegeben wurden in die Inputbox und desweiteren soll die Textdatei in der die Daten gespeichert werden, durchsucht werden können!

Wie mache ich das?!?

Geschrieben

vorweg: also ich finde ja, dass VBS für eine adressverwaltung etwas falsch dimensioniert ist. wollt ihr die daten in stinknormalen textdateien verwalten oder nicht doch lieber eine sql-datenbank verwenden?

zu 1. du kannst entwdeder mit der funktion Len auf nullstring überprüfen oder aber du vergleichst auf = "".

zu 2. verwende eine funktion (klasse wird bei vbs schwierig werden), die sequentielle datendateien verarbeitet. ist dir das zu kompliziert, verwende einen bestehenden datenbanklayer und erfinde nicht das rad neu.

s'Amstel

Geschrieben

Also das erste mit dem LEN, das verstehe ich! ;) Das probier ich mal!

Aber das zweite mit der Funktion kapiere ich nicht ganz! Über Google hab ich auch nicht wirklich was gefunden! Aber ich such nochmal nach sequentiellen datendateien ;)

  • 4 Wochen später...
Geschrieben

was hast du denn bis jetzt zusammenbekommen - verwendest du einen wrapper wie FSO oder wie greifst du auf die dateien zu? wie greifst du darauf zu - zeilen- oder zeichenweise oder gar blockweise. ein bisschen mehr infos, um dir weiterhelfen zu können, wären ja nicht ganz uneben.

s'Amstel

Geschrieben

mal ein ausschnitt: Ich hab mal versucht die Suchfunktion mit If-Schleifen zu machen...

Also die Variable Nachname ist definiert, habs nur hier nichtmehr mit in dem Ausschnitt drin!

Da wo ich rot markiert habe, weiß ich nicht was da rein soll :confused:

suche = InputBox ("Nach was wollen sie suchen? (Nachname, PLZ oder Ort)" , "Suchfunktion")


'Suche nach Nachname

	Do

		If suche = "Nachname"	Then


				[COLOR="Red"]Set write = fso.OpenTextFile (NachnameFile, 8,True)

				write.WriteLine(Nachname)

				write.close[/COLOR]		End If

	Loop 



'Suche nach PLZ	

	' Do

' 		If suche = "PLZ"	Then

' 			WScript.Echo (Plz)

' 		End If

' 	Loop

' 	

' 'Suche nach Ort	

' 	Do

' 		If suche = "Ort"	Then

' 			WScript.Echo (Ort)

' 		End If

' 	Loop

Geschrieben

ich will dich jetzt echt nicht verwirren, aber bist du dir sicher, dass das ein optimaler ansatz ist für eine datenbankähnliche anwendung?

wie sieht denn dein NachnameFile genau aus? speicherst du darin nur nachnamen und eine datensatznummer oder wie oder was?

versuche mal die zeilen in einer schleife auszulesen:

Do While dateiNachnameFile.AtEndOfStream <> True

      eineZeile = dateiNachnameFile.ReadLine

      'mach irgendwas mit eineZeile

Loop

z.b. kannst du im loop vergleichsoperationen zum suchen einbauen.

zum FSO generell:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/sgProgrammingFileSystemObject.asp

"working with files" beschreibt ganz gut die operationsarten (lesen, schreiben und erstellen) von FSO:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/sgworkingwithfiles.asp

edit: und vermeide möglichst sachen wie OpenTextFile (NachnameFile, 8,True).

verwende konstanten, in diesem fall ForAppending. du weisst sonst eine woche später nicht mehr, was da eigentlich programmiert wurde.

ich selbst würde das jedenfalls etwas anders aufbauen, nämlich einen grundstock an basisfunktionen definieren, die mit deinen dateien, basierend auf FSO, umgeht.

s'Amstel

Geschrieben

Sorry für die Verwirrung, habe das wohl falsch verstanden.

Also ich muss da erst ein Array bauen, dann Zeile für Zeile lesen irgendwie und dann halt splitten und nach dem Baustein (z.b. nachname) suchen...

so ganz hab ichs auch noch nicht geblickt...:confused:

*Erst mal über Array´s informier* :

Geschrieben

Also so siehts jetzt aus (nur die Suche, mache dafür n extra Programm, ist sinnvoller finde ich) :)

Option Explicit 


'Globale Variablen

Dim strSuche

Dim sAdressFilePath

Dim arrAdresse()'Array

Dim iArrayElements

iArrayElements = 1

ReDim preserve arrAdresse(6,1)


sAdressFilePath = "U:\LisaJ_Scripte\adresse.txt"

'=================================================================

' Main

'=================================================================


'InputBox mit Frage nach Suchwort

strSuche = InputBox ("Geben Sie bitte Ihren Suchbegriff ein!" , "Suchfunktion")


'Datei einlesen

ReadEntireFile(sAdressFilePath)



'=================================================================

' Functions und subs

'=================================================================


'Erzeugt aus dem Inhalt der Datei ein tolles Array

Sub AddToArray(sLine)

	Dim arTemp 'Variable für Temporäres Array

	iArrayElements = iArrayElements + 1

	WScript.Echo "iArrayElements:" & iArrayElements & vbNewLine

	ReDim Preserve arrAdresse(6, iArrayElements)


	arTemp = Split(sline, ";")

	'WScript.Echo UBound(arTemp)

	arrAdresse(0,iArrayElements) = arTemp(0)

	arrAdresse(1,iArrayElements) = arTemp(1)

	arrAdresse(2,iArrayElements) = arTemp(2)

	arrAdresse(3,iArrayElements) = arTemp(3)

	arrAdresse(4,iArrayElements) = arTemp(4)

	arrAdresse(5,iArrayElements) = arTemp(5)


	Dim i

	For i = 1 To UBound(arrAdresse,2)

		WScript.Echo arrAdresse(0,i)

		WScript.Echo arrAdresse(1,i)

		WScript.Echo arrAdresse(2,i)

		WScript.Echo arrAdresse(3,i)

		WScript.Echo arrAdresse(4,i)

	    WScript.Echo arrAdresse(5,i)

	Next


End Sub


'Laden der Daten

Function ReadEntireFile(strAdressFilePath)

   Const ForReading = 1

   Dim fso, theFile, retstring

   Set fso = CreateObject("Scripting.FileSystemObject")

   Set theFile = fso.OpenTextFile(strAdressFilePath, ForReading, False)

   Do While theFile.AtEndOfStream <> True

      AddToArray(theFile.ReadLine)

   Loop

   theFile.Close

   ReadEntireFile = retstring

End Function

Wenn ich als Suchbegriff jetzt beispielsweise "Hans" (also Vorname) eingebe, dann sollen alle Einträge mit dem Suchbegriff verglichen werden und es soll nach Übereinstimmungen gesucht werden, (mit ner For...Next Schleife).

Wenn dann eine Übereinstimmung gefunden wurde soll die komplette Adresszeile in ein temporäres Array kopiert werden, wenn alle Einträge auf Übereinstimmung geprüft wurden, soll das Ergebnis ausgegeben werden.

So, wie spreche ich in einer Schleife den Suchbegriff der eingegeben wurde an?

Woher weis der Rechner das er dann nur bsp.weise in der Spalte Name suchen soll??

:confused:

Geschrieben

Function SucheInArray()

	Dim i

	Dim arrTempAdresse()

	Dim iArrayElem2

	iArrayElem2 = 0


	For i = 1 To UBound(arrAdresse, 2)									'von 1 bis zum höchsten Index-Wert

		If strSuche = arrAdresse(1,i) Then								'Wenn der Suchbegriff = dem Feld (1,i) im Datenarray ist,dann...

			iArrayElem2 = iArrayElem2 + 1								'iArrayElem2 um 1 erhöhen

			WScript.Echo "iArrayElements:" & iArrayElem2 & vbNewLine	

			ReDim Preserve arrTempAdresse(6, iArrayElem2)				'Deklaration eines dynamischen Array

			arrTempAdresse(0, iArrayElem2) = arrAdresse(0,i) 

			arrTempAdresse(1, iArrayElem2) = arrAdresse(1,i) 

			' arrAdresse(1,iArrayElements) = arTemp(1)

			' arrAdresse(2,iArrayElements) = arTemp(2)

			' arrAdresse(3,iArrayElements) = arTemp(3)

			' arrAdresse(4,iArrayElements) = arTemp(4)

			' arrAdresse(5,iArrayElements) = arTemp(5)


		End If 

	Next

Ist jetzt n Codeausschnitt, wie sage ich da das WENN eine Übereinstimmung gefunden wurde, die entsprechende Zeile in ein neues Temporäres Array gespeichert werden soll?

Geschrieben

bei dem code wird doch schon auf übereinstimmung durchsucht und es kommen nur die Datensätze raus, die mit dem der Datenbank übereinstimmen

Sprich: Wenn übereinstimmung da ist wird arrAdresse in arrTempAdresse kopiert

anschließend hast du alle Datensätze im arrTempAdresse, die dem SuchString entsprechen ;)

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...