Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Info Coronavirus/Vaccinare vs Fake News

Enel / Regularizare si calcul din...

Dimensiune rost profil trecere

Se cauta femeie cu sau fara famil...
 rusa vs ruseasca

Serena Williams se retrage din te...

Este informatie publica/accesibil...

French Drain+ Turnat Alei casa
 Instalatie electrica apartament

Vremurile imperiilor

amenda ISU

Magazine macbook pro
 Fața nevazuta a vestului civ...

The Sandman (2022- )

Curatare jante aluminiu bicicleta

Plafoniera led cu backlight
 

[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: 5,056
  • Î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: 27,729
  • Î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,448
  • Î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

Neurochirurgie minim invazivă Neurochirurgie minim invazivă

"Primum non nocere" este ideea ce a deschis drumul medicinei spre minim invaziv.

Avansul tehnologic extraordinar din ultimele decenii a permis dezvoltarea tuturor domeniilor medicinei. Microscopul operator, neuronavigația, tehnicile anestezice avansate permit intervenții chirurgicale tot mai precise, tot mai sigure. Neurochirurgia minim invazivă, sau prin "gaura cheii", oferă pacienților posibilitatea de a se opera cu riscuri minime, fie ele neurologice, infecțioase, medicale sau estetice.

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