Gå til innhold

[haster] Sjekke om streng matcher med en annen som SQL LIKE


Anbefalte innlegg

Skrevet (endret)

Programmerer i VB.net og looper igjennom en excel-fil.

Si at cellen inneholder:

1-butanol

mens jeg ønsker å få en match på følgende:

1-butanol Butan-1-ol

 

To andre eksempler

Fra excel:

Jern(III)nitrat (9 hydrat)

Må matche:

846000-Jern(III)nitrat

 

Fra excel:

Jern(III)klorid 1000 g

må matche:

Jern(III)klorid

 

Hvordan kan dette gjøres i VB.net?

Kan vel kanskje bruke Range.Find?

Tar i mot alle forslag og løsninger!

 

Kan enten matche filnavn mot excel-verdi (loope igjennom filer) eller matche excel verdi mot filnavn. hva som er enklest..

EDIT:

La til forslag

Endret av Gjest
Videoannonse
Annonse
Skrevet (endret)

Du ønsker å sjekke om en string inneholder en annen string?

 

Dim string1 As String
Dim string2 As String

string1 = "butanol"
string2 = "butanol Butan-1-ol"

if string2.contains(string1) Then
 //Do something
End if

Endret av Untouchab1e
Skrevet (endret)

Takk for godt forslag, dessverre klarer den ikke å ta alt..

F.eks:

Excel:

Ammoniumkarbonat ren

 

Filnavn:

Ammoniumkarbonat

 

 

EDIT:

Ser nærmere på det...

Endret av Gjest
Skrevet (endret)

Takk for godt forslag, dessverre klarer den ikke å ta alt..

F.eks:

Excel:

Ammoniumkarbonat ren

 

Filnavn:

Ammoniumkarbonat

 

Dim string1 As String
Dim string2 As String
string1 = "Ammoniumkarbonat"
string2 = "Ammoniumkarbonat ren"
if string2.contains(string1) Then
    //Do something
End if

 

Dette burde fungere, men hvis det er omvendt (bytt om string1 og 2), så vil det ikke fungere. Hvis du vil sjekke begge veier må du kanskje gjøre noe slikt..

 

Dim string1 As String
Dim string2 As String
string1 = "Ammoniumkarbonat"
string2 = "Ammoniumkarbonat ren"
if string2.contains(string1) Or string1.contains(string2) Then
 //Do something
End if

Endret av Untouchab1e
Skrevet (endret)

Per nå har jeg følgende kode:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

	oXL = CreateObject("Excel.Application")
	oXL.Visible = False
	oWB = oXL.Workbooks.Open("D:\datablader\Datablad og nummer.xlsx")
	oSheet = oWB.Sheets(1)
	Dim datablader As New List(Of datablad)
	Dim di As New DirectoryInfo("D:\datablader\til-merking")
	Dim fiArr As FileInfo() = di.GetFiles()
	Dim fri As FileInfo
	For Each fri In fiArr
		findCell(fri.Name)
	Next
	oWB.Close()
	oXL.Quit()
End Sub
Public Function findCell(ByVal name As String)
	oRng = oSheet.Range("A2:A200")
	Dim rCell As Excel.Range
	For Each rCell In oRng.Cells
		Dim strNavn As Excel.Range = rCell.Offset(0, 0)
		Dim strNummer As Excel.Range = rCell.Offset(0, 1)
		If (Not (IsNothing(strNavn.Value)) And Not (IsNothing(strNummer.Value))) Then
			If (Not strNavn.Interior.ColorIndex = 35 And Not strNavn.Interior.ColorIndex = 38) Then
				If strNavn.Value.ToString.ToLower.Contains(name.ToLower) And name.ToLower.Contains(strNavn.Value.ToString.ToLower) Then
					Debug.WriteLine(strNavn.Value & " : " & name & " - " & strNummer.Value)
				End If
				'datablader.Add(a)
				'Debug.Print(strNavn.Value & " : " & strNummer.Value & " : " & strNavn.Interior.ColorIndex)
			End If
		End If
	Next rCell
End Function

 

Fungerer ikke så bra gitt..

Hadde jo på "release"-mode - så ingen debug.writeline. Skal se videre :)

Endret av Gjest
Skrevet (endret)

Du har en liten bug.. Bruk Or, ikke And

 

Public Function findCell(ByVal name As String)
	oRng = oSheet.Range("A2:A200")
	Dim rCell As Excel.Range
	For Each rCell In oRng.Cells
		Dim strNavn As Excel.Range = rCell.Offset(0, 0)
		Dim strNummer As Excel.Range = rCell.Offset(0, 1)
		If (Not (IsNothing(strNavn.Value)) And Not (IsNothing(strNummer.Value))) Then
			If (Not strNavn.Interior.ColorIndex = 35 And Not strNavn.Interior.ColorIndex = 38) Then
				If strNavn.Value.ToString.ToLower.Contains(name.ToLower) Or name.ToLower.Contains(strNavn.Value.ToString.ToLower) Then
					Debug.WriteLine(strNavn.Value & " : " & name & " - " & strNummer.Value)
				End If
				'datablader.Add(a)
				'Debug.Print(strNavn.Value & " : " & strNummer.Value & " : " & strNavn.Interior.ColorIndex)
			End If
		End If
	Next rCell
End Function

Endret av Untouchab1e
Skrevet

Dessverre matcher ikke dette godt nok da det må være 100% korrekt. Ender nok med å bytte ut navn i excel henhold til filnavn på dokumentet,

  • 1 måned senere...
Skrevet

Fra excel:

Jern(III)nitrat (9 hydrat)

Må matche:

846000-Jern(III)nitrat

Her vil du ikke kunne få noen match basert på det du har sagt - ingen av strengene er en substreng av den andre. Så hva er reglene for gyldig matching?

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...