Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Cum ajunge remorca de tir inapoi ...

Alt "Utilizator nou" pe T...

ULBS INFORMATICA

Index preturi
 Boxa membrana tweeter infundata

Am nevoie de poze cu un curcubeu

Whisky for Mac

Xiaomi 14 Gpay
 Izolare zid exterior de scandura

Dezinstalare drivere W11 23H3

Recomandare masina de spalat fiab...

BSOD din cauza Intel Audio DSP dr...
 De ce sunt oamenii nostalgici

Cum vand casa fara factura Hidroe...

Scor FICO minim

Tonometru compensat CAS?
 

[VisualBasic] CUM citire fisier - verificare rand dupa valori multiple

- - - - -
  • Please log in to reply
2 replies to this topic

#1
sorin147

sorin147

    Senior Member

  • Grup: Senior Members
  • Posts: 6,349
  • Înscris: 11.08.2003
Am un fisier pe care vreau sa-l parcurg si, la fiecare rand, sa-mi caute daca gaseste valorile a, b sau c (de exemplu),
Valorile a, b si c sunt intr-o variabila array.

Daca parcurg fisierul cu do until e OK, trece prin fiecare rand. Buba apare atunci cand, ajungand la un rand, vreau sa caute pe randul respectiv daca sunt valori din arrayul in cauza. Asta o fac cu for each insa, in loc sa ramana pe randul respectiv pana termina tot arrayul, trece la randul urmator. Mai pe scurt, la fiecare trecere, foloseste acelasi index de citire si pentru rand si pentru array.
O solutie ar fi sa pornesc din array si, la fiecare element. sa citesc fisierul de la capat dar asta nu-mi suna prea bine.

Idei? Sugestii? Solutii? :)

CUM MERGE
Dim fileName, errors
Set fso = CreateObject("Scripting.FileSystemObject")

fileName = "<fisierul in cauza>"
errors = Array("a","b", "c")

processFile()
Sub processFile()
For Each val in errors
  Set f = fso.openTextFile(fileName)
		Do until f.atendofstream
				 MsgBox ("eroare aici " & f.readline & " " & val)
		Loop
  f.close
Next
End Sub


Cum mi-as dori sa mearga: sa deschid fisierul o singura data si pentru fiecare rand sa caut erorile
Sub processFile()
Set f = fso.openTextFile(fileName)
Do until f.atendofstream
  For Each val in errors
				 MsgBox "eroare aici " & f.readline & " " & val
  Next
	Loop
f.close
End Sub


Ia, cred ca i-am dat de cap: pentru fiecare rand, o procedura separata care trece prin array.
Se poate mai elegant?

Sub processFile()
Set f = fso.openTextFile(fileName)
Do until f.atendofstream
	 processLine(f.readline)
Loop
f.close
End Sub

sub processLine(currentLine)
for each val in errors
  msgbox (val & " " & currentLine)
next
end sub



#2
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,424
  • Înscris: 10.08.2005
parca asa, a trecut ceva timp
Private Sub readLines()
Dim strLine As String
Open path For Input As #id
	Do While Not EOF(id)
		Line Input #id, strLine
	 REM process here
	Loop
Close #id
End Sub


Edited by MarianG, 28 February 2019 - 00:35.


#3
addysoftware

addysoftware

    Ecological Member :)

  • Grup: Moderators
  • Posts: 7,552
  • Înscris: 12.04.2007
Paseaza randul respectiv ca "string" catre subprocedura de verificare; o sa dau un exemplu acusica.

Sub ProcessFile (sFileName as string)
Dim iFileNr as integer, s as String
iFileNr=FreeFile
Open sFilename for Input as #iFileNr
Do While Not EOF(iFileNr)
		 Line Input #iFileNr, s
		 Call ProcessLine (s)
Loop
Close #iFileNr
End Sub

Deci, chemi subprocedura ProcessLine cu argumentul s.
acu sper ca nu e o mica eroare de sintaxa la Line Input; poate se scrie LineInput

de asemenea, se poate face si in cadrul aceleiasi proceduri, un loop in alt loop; foloseste insa variabilele corespunzatoare.

Limbajul asta modern cu fso si .Net poate fi diferit de "stilul vechi" pe care l-am folosit; cred insa ca exista backward compatibility.

Edited by addysoftware, 28 February 2019 - 03:20.


Anunturi

Chirurgia endoscopică a hipofizei Chirurgia endoscopică a hipofizei

"Standardul de aur" în chirurgia hipofizară îl reprezintă endoscopia transnazală transsfenoidală.

Echipa NeuroHope este antrenată în unul din cele mai mari centre de chirurgie a hipofizei din Europa, Spitalul Foch din Paris, centrul în care a fost introdus pentru prima dată endoscopul în chirurgia transnazală a hipofizei, de către neurochirurgul francez Guiot. Pe lângă tumorile cu origine hipofizară, prin tehnicile endoscopice transnazale pot fi abordate numeroase alte patologii neurochirurgicale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate