Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




Visual Basic - line input#


Messaggi consigliati

Inserito:

Ciao a tutti,

Qualcuno di voi mi sa indicare come posso caricare una variabile con il contenuto di un file txt partendo da una posizione ben precisa utilizzando il comando line input# ?(scavalcando per es: i primi dieci caratteri)

esempio di lettura txt:

abcdefghilmnopqrstuvz....etc.

caricare la variabile partendo dalla M cosi avendo nella variabile mnopqrstuvz....etc.

Alessandro


Inserita:

Naturalmente devi prima aprire il file (OPEN "nome file" FOR (in/out/random) AS #1)

poi devi decidere se aprire il file come input, random ecc

Se apri come random e quindi sai dove posizionarti (byte), prendi tutta la stringa e poi

manipolala con MID/RIGHT/LEFT ecc..

spero di esserti stato utile...

Inserita: (modificato)

Prova così:

Private Sub cmdStart_Click()
  Dim sStringa As String
  Dim iLunghezza As Integer

  Open "TuoFile.txt" For Input As #1
  
  Line Input #1, sStringa
  iLunghezza = Len(sStringa)
  
  If iLunghezza > 10 Then
    sStringa = Right(sStringa, iLunghezza - 10)
  Else
    sStringa = ""   'la riga ha meno di 11 caratteri
  End If
  
  Close #1
End Sub

Ciao!

Modificato: da Gabriele Corrieri
Inserita:

Public Sub prova()

Open "f:\nomefile.txt" For Input As #1

Do While Not EOF(1)

Line Input #1, a$

If InStr(1, a$, "m") > 0 Then

variabile = Right(a$, Len(a$) - (InStr(1, a$, "M") - 1))

End If

Loop

Close #1

End Sub

Se ho capito bene quello che vuoi con questa rutine dovresti ottenere quello che vuoi

chiaramente al posto di "M" dovresti mettere una variabile al cui interno è memorizzata la lettera che ti serve com inizio ricerca.

Variabile viene sempre sovrascritta però tu potresti creare una matrice ed il valore immetterlo nella matrice aumentando di volta in volta l'indice

Spero di essere stato chiaro

Inserita: (modificato)

Signori miei....

Funziona!

Grazie mille.

Alessandro

Modificato: da alessandro_
Inserita:

Le due funzioni realizzano entrambe quanto richiesto.

La soluzione di Steu mi sembra più versatile, in quanto analizza, riga per riga, l'intero file, ma ricerca un carattere, anziché una posizione, questo funziona se ti interessa trovare la prima ricorrenza di quel carattere nella riga (mi era parso, invece, che ti interessasse proprio partire da una posizione ben definita).

La soluzione di Trunc funziona solo sulla prima riga, tralasciando le successive, ma credo che sia quel che stavi cercando (salvo che l'infomazione si trovi su più linee e tu intenda non perderti il resto)

Bisognerebbe capire quali siano le reali necessità e, con un mix tra le due soluzioni, tirar giù il codice più appropriato.

Personalmente avrei inteso la soluzione di Steu (più record da analizzare, linea per linea), ma con dati da rilevare a partire da una posizione ben definita (a partire dall'undicesimo carattere di ciascuna linea, come ha scritto Trunc)

Gli strumenti per realizzare questo ci sono tutti, non sto quindi a ripetere il codice.

Inserita:

Ho provato solo la soluzione di Trunc ed avendo ottenuto cio che cercavo non ho provato la tua (premetto che essendo un semi neofita di Vb fatico non poco anche per le cose + banali!)

grazie ancora per la gentile collaborazione

Ale

Inserita: (modificato)

Ho ancora Bisogno di Voi...(sarebbe la ciliegina sulla torta )

Dunque...La mia necessità è:

Aprire un file txt

partendo sempre dalla testa del file

cancellare N righe,

traslare il contenuto rimanente del txt verso l'alto di N righe quante ne ho tolte.

salvare e chiudere il tutto.

Es:

apro file che contiene:

riga 1

riga 2

riga 3

riga 4

riga 5

riga 6

cancello sempre le prime tre righe in testa e recupero verso l'alto in modo da ottenere: (non devo lasciare righe vuote!)

riga 4

riga 5

riga 6

Come posso Fare?

Grazie per il Tempo dedicatomi

Ale

P.S: Domani Posto porzione di codice con le Vostre Modifiche e Spiego meglio cosa Sono Riuscito ad ottenere con i Vs. Preziosi consigli precedenti

Modificato: da alessandro_
Inserita: (modificato)

La via piu' semplice (e forse anche la piu' veloce) e' quella di aprire il file da compattare in lettura ed creare un secondo file.

Man mano che leggi le righe che ti servono , le scrivi sul file in uscita.

Una volta terminato cancelli il file source e rinomini il target come source.

Ciao B)

Modificato: da ifachsoftware
Inserita:

Public Sub prova()

Open "f:\file1.txt" For Input As #1

For a = 1 To 3

Line Input #1, b$

Next a

Open "f:\file2.txt" For Output As #2

Do While Not EOF(1)

Line Input #1, b$

Print #2, b$

Loop

Close #1

Close #2

End Sub

se è solo per questo non preoccuparti.

Non puoi avere più file con lo stesso nome nella stessa cartella o cambi il nome del file o cambi path.

Inserita:

VisualBasic "tollera" quando non dichiari una variabile prima di utilizzarla e le assegna il tipo "Variant" di default, che ti occupa il maggior spazio di memoria, perché ammette la registrazione di dati di qualunque tipo.

Per abituarti a lavorare correttamente, ti consiglio di dicharare le variabili sempre prima di utilizzarle, e di assegnar loro il tipo giusto, in modo da rendere il tuo programma snello ed affidabile (con poche righe di codice non ti accorgi della differenza, ma la cosa si fa evidente in programmi complessi).

Inserita: (modificato)

citazione di 3 post precedenti (ifach sw)

Una volta terminato cancelli il file source e rinomini il target come source.

E come si fa ad ottenere Questo in Visual Basic?

Ale

Modificato: da alessandro_
Inserita:

Public Sub prova()

Open "f:\file1.txt" For Input As #1

For a = 1 To 3

Line Input #1, b$

Next a

Open "f:\file2.txt" For Output As #2

Do While Not EOF(1)

Line Input #1, b$

Print #2, b$

Loop

Close #1

Close #2

Kill "f:\file1.txt"

Name "f:\file2.txt" As "f:\file1.txt"

End Sub

L'istruzione Kill cancella il file , l'istruzione name lo rinomina

quando esegui kill devi essere sicuro che il file esissta altrimenti ti genera l'errore e lo devi gestire con

ON ERROR

Inserita: (modificato)

Mi Manca ancora una cosa...

Come si crea un file txt nuovo,vuoto, in una path specifica.

Es:

voglio creare

c:\pippo\pluto\paperino.txt (creato e compleatamente vuoto)

Grazie ancora

Ale

Ps: Vi devo una cena! :-)

Modificato: da alessandro_
Inserita:

la devo creare,

Tutto questo mi serve per far si che il tuo esempio funzioni non solo una volta ma che mi esegua cancellazione e traslazione di N linee su mio comando e sempre sullo stesso file sino ala cancellazione dell'intero contenuto.

Inserita: (modificato)

Devi darmi più dati e devi farmi degli esempi perchè il file che ti ho creato puo' tutte le volte che vuoi fino a cancellare completamente il file, non aver paura di scrivere ti posso aiutare meglio.

Descrivimi esattamente quello che hai cosa devi fare e cosa vuoi ottenere alla fine.

Modificato: da STEU
Inserita:

ok

La mia necessita è cancellare su di un trigger 10 linee (partendo sempre dalla testa del file) di un file di testo (es. pippo.txt) e di traslarne il contenuto verso l'alto di modo che il resto del file parta sempre dalla prima linea ed ogni qual volta si presenta questo trigger riaprire sempre lo stesso file (pippo.txt)e cancellare ulteriori 10 linee e ritraslare ancora il restante contenuto sino alla prima liea del file, e così via sino alla cancellazione totale del contenuto.

questo mi serve perche' ho realizzato delle maschere di inserimento\visualizzazione dati (for append access), e quindi ogni nuovo inserimento accodo nel file dieci nuove linee di dati (un lotto dati).

le stesse maschere mi visualizzano poi l'inserimento di dati + vecchio (solo le prime dieci linee visto che i successivi li accodo)

cio che mi serve adesso è un comando per poter cancellare il lotto dati + vecchio (le prime dieci linee x l'appunto)e traslare il contenuto verso l'alto portando il pen'ultimo lotto dati in testa al file (posizione per la corretta visualizzazione).

Spero di essere riuscito a spegarmi meglio..

Ale

Inserita:

Public Sub prova()

Open "f:\pippo.txt" For Input As #1

For a = 1 To 10

Line Input #1, b$

If EOF(1) Then

Close #1

Kill "f:\pippo.txt"

Open "f:\pippo.txt" For Output As #1

Print #1, ""

Close #1

Exit Sub

End If

Next a

Open "f:\pippo2.txt" For Output As #2

Do While Not EOF(1)

Line Input #1, b$

Print #2, b$

Loop

Close #1

Close #2

Kill "f:\pippo.txt"

Name "f:\pippo2.txt" As "f:\pippo.txt"

End Sub

Se ho capito la rutine dovrebbe fare il caso tuo

Devo ancora capire cosa intendi con:

Come si crea un file txt nuovo,vuoto, in una path specifica.

Es:

voglio creare

c:\pippo\pluto\paperino.txt (creato e compleatamente vuoto)

ti do un consigilo vai a vedere nell'. le istruzioni

mkdir creazione di directory

chdir cambia directori (il "cd" del vecchio DOS)

rmdir rimuovi la directory (fuziona solo se ladirectory è vuota)

utilizza . del vba di excel se non hai vb6

Inserita:

Grazie Di cuore Steu

Domani la provo.

Devo scappare!

ciao Alessandro

  • 7 months later...
Inserita:

Semplicemente digitando:

Open "c:\paperino.txt" For Append As #1

Close #1

Se il file non esiste viene creato, ma non il percorso. Quindi applica un controllo con l'istruzione vb "dir" per accertarti che il PERCORSO ESISTA, altrimenti è errore!!!

Bye

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...