Bestimmte Zeilen aus mehreren Dateien in eine Date schreiben

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

ich hatte den überschreibungsschutz extra nicht in die procedure mit reingemacht, damit das jeder selber entscheiden kann.

aber bitte:
[gibt es irgendwelche nachteile daran, dass mit ReadFile() zu machen, und nicht mit Filesize() ?]

Code: Alles auswählen

Procedure.s increaseFilename(file.s)
  Protected path.s
  Protected ext.s
  Protected fullname.s
  Protected name.s
  If ReadFile(33,file)
    CloseFile(33)
    path=GetPathPart(file)
    fullname.s=GetFilePart(file)
    ext.s=GetExtensionPart(file)
    name=Left( fullname, Len(fullname)-Len(ext)-1 )
    i=2
    While ReadFile(33, path + name + "(" + Str(i) + ")." + ext )
      CloseFile(33)
      i+1
    Wend
    file= path + name + "(" + Str(i) + ")." + ext
  EndIf
  ProcedureReturn file
EndProcedure



datei$="C:\test\rippchen\tempo.txt"

CreateFile(0, increaseFilename(datei$) )
CloseFile(0)

CreateFile(0, increaseFilename(datei$) )
CloseFile(0)

CreateFile(0, increaseFilename(datei$) )
CloseFile(0)

CreateFile(0, increaseFilename(datei$) )
CloseFile(0)
insofern "C:\test\rippchen\tempo.txt" nicht existiert, aber es die ordner bereits gibt, werden die dateien
C:\test\rippchen\tempo.txt
C:\test\rippchen\tempo(2).txt
C:\test\rippchen\tempo(3).txt
C:\test\rippchen\tempo(4).txt
erstellt.

<edit>
die proc gibt den dateinamen zurück wie er übergeben wurde, wenn sie nicht existiert. wenn sie aber schon existiert, wird der name mit klammern inkrementiert, bis ein 'unbesetzter' dateiname entsteht, und wird zurückgegeben.
nachteil:
aus z.b.datei(9).ext macht die proc (wenn datei exisiert) den namen datei(9)(1).ext
Zuletzt geändert von #NULL am 18.10.2006 13:00, insgesamt 1-mal geändert.
my pb stuff..
Bild..jedenfalls war das mal so.
Nafets
Beiträge: 19
Registriert: 09.02.2005 21:01

Beitrag von Nafets »

@#NULL:

funktioniert wunderbar Dein Code.

Jetzt hätt mich nur noch interessiert wie sich das mit den Variablen in der Prozedur verhält.

Wieso haben die bei der Deklaration andere Namen als beim Aufruf ?
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

@#Null:

Solche Sachen würde ich ausschließlich mit #PB_Any machen. Das ist die
sicherste Methode.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Nafets hat geschrieben:Wieso haben die bei der Deklaration andere Namen als beim Aufruf ?
der name in der deklaration wird nur im code der Procedure selber benötigt.

später beim aufruf kann man jeden beliebigen ausdruck desselben typs dafür nehmen.
das ist schlicht und einfach sinn der sache, sonst bräuchte man doch keine Procedures schreiben.

was hab ich von einer Plot(x,y), wenn ich sie nicht mit

Code: Alles auswählen

Plot( 320+128*Sin((n/37)*#PI/180), 240+96*Cos((n/37)*#PI/180))
aufrufen kann?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

@ntq
ja, das stimmt allerdings. die wahrscheinlichkeit einer bereit verwendeten FileID 33 ist zwar gering, aber beim programmieren, sollte es nur die wahrscheinlichekiten 0 und 1 geben <) .

@nafets
alle in dieser proc definierten variablen sind 'Protected'. auch die variable 'file' ohne das schlüsselwort 'Protected zu verwenden, weil sie bereits im prozeduren-kopf deklariert wird.

beim aufruf der proc zählt nur der inhalt von 'datei$'. du könntest ja auch direkt

Code: Alles auswählen

CreateFile(0, increaseFilename( "C:\test\rippchen\tempo.txt" ) ) 
schreiben, also ohne einen bezeichner zu verwenden. in der proc wird die variable 'file' am anfang mit dem übergebenen wert gefüllt. das einzige was 'datei$' und 'file' miteinander zu tun haben ist also, das beim aufruf der inhalt von 'datei$' in 'file' kopiert wird. datei$ wird selbst nicht verändert.

anders ist es beim direkten arbeiten mit pointern/zeigern bzw wenn arrays oder linked-lists übergeben werden..

in der hilfe gibt es einen abschnitt
-----------------------------
Prozeduren Unterstützung

Global
Procedure : EndProcedure
Protected
Shared
Static
-----------------------------
my pb stuff..
Bild..jedenfalls war das mal so.
Nafets
Beiträge: 19
Registriert: 09.02.2005 21:01

Beitrag von Nafets »

Dass Variablen variabel sein müssen is schon klar.
Bei Deinem Beispiel würde aber aus Plot(x,y) Plot(a,b) werden.

So ist es jedenfalls beim Code von #NULL weiter oben.

Oder reden wir jetzt aneinander vorbei ?
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

@Nafets

> Oder reden wir jetzt aneinander vorbei ?

wahrscheinlich. ich formuliers mal anders.

bei erstellen/deklarieren einer procedure definiere ich argumente,
die dazu dienen, werte von außen in die Proc zu übernehmen.

Code: Alles auswählen

Procedure DisplayCoords( X.l, Y.l )
  Debug "Koordinaten: "+ Str(X) + ", " + Str(Y)
EndProcedure
später beim aufruf kann ich sie durch alles, was ich will ersetzen

Code: Alles auswählen

DisplayCoords(42,23)

DisplayCoords(37*#PI,42*#PI)

a = 17 : b = 11
DisplayCoords(a,b)
es besteht also kein grund, für den aufruf denselben namen wie bei der deklaration zu verwenden.
eher im gegenteil:
manche programmierer (mich eingeschlossen) verwenden lieber
mit absicht andere namen, um verwechslungen vorzubeugen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Nafets
Beiträge: 19
Registriert: 09.02.2005 21:01

Beitrag von Nafets »

OK. Kapiert.

Danke.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

d'rien
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten