# Textfiles einlesen und schreiben



## spierala (2. Mai 2006)

Hallo!

Angenommen ich habe zwei textfiles in einem gemeinsamen Ordner liegen.
Ich möchte diese gerne verschmelzen und als einzelne textfile neu schreiben...
Wie bekomme ich denn den Inhalt einer textfile in eine variable?
Hab schon lang nicht mehr gescriptet, drum wär ich sehr dankbar für eure Hilfe....

cheers

Florian


----------



## Biergamasda (2. Mai 2006)

Soweit ich weis gibt es unter JavaScript zwar eine Möglichkeit, Dateien zu schreiben bzw. zu lesen, jedoch hat das bei mir noch nie funktioniert 

Mein Lösungsvorschlag währe per AJAX und responseText.

hier mehr dazu

dazu musst du die Files halt auf einen Server packen 

lg


----------



## Sven Mintel (2. Mai 2006)

In welcher Umgebung soll das ganze denn vonstatten gehen.... lokal auf deinem Rechner oder über einem Webserver?


----------



## spierala (2. Mai 2006)

die files liegen lokal auf dem rechner...
ich arbeite in max msp, das auch javascript unterstützt...

irgendwie include oder sowas hab ich gehört....


----------



## Sven Mintel (2. Mai 2006)

was ist max msp ?


----------



## spierala (2. Mai 2006)

das erklärt sich am besten von selbst unter:

http://cycling74.com/products/maxmsp

auf jeden fall kann ich da auch objekte bauen, die ein javascript enthalten...


----------



## Sven Mintel (3. Mai 2006)

Naja....in dieses max msp will ich mich heut lieber nicht einlesen 

Die Vorgehensweise ist nicht weiter aufregend...
man erstellt ein sog. FileSystemObject und arbeitet dann mit dessen Methoden zum Öffnen, Lesen, Schreiben und Schliessen von Dateien...


```
var fso = new ActiveXObject("Scripting.FileSystemObject");
var f1 = fso.OpenTextFile("datei1.txt",8);//Zu beschreibende Datei
f2 = fso.OpenTextFile("datei2.txt",1);//Zu Lesende Datei
f1.write(f2.ReadAll());
f1.close();
f2.close();
```

Das wars schon 

@Biergamasda
das Ganze funktioniert natürlich nicht im Browser, wenn du eine solche JS-Datei allerdings mit dem WSH ausführen lässt, dann gehts


----------



## spierala (3. Mai 2006)

Hi das problem ist dass Max nur das Core JavaScript unterstützt, wie hier dokumentiert:
http://www.croczilla.com/~alex/reference/javascript_guide/index.html

activeX scheint da nicht berücksichtigt zu sein.

ich hab hier einen ansatz:


```
function writefile(s)
{
	var f = new File(s,"write","TEXT"); 
	var s2 = "I am a file named " + f.filename + ", located in " + f.foldername;

	if (f.isopen) {
		post("writing string to file: " + s2 + "\n");
		f.writestring(s2); //writes a string
		f.close();
	} else {
		post("could not create file: " + s + "\n");
	}
}
```

damit kann ich eine txt file schreiben...
genau was ich brauche.
im prinzip möchte ich eine XML file schreiben, in der ein tag von einer Variablen abhängt. 
in meiner ursprünglichen Problembeschreibung ging ich davon aus, dass ich den ersten teil der XML file in textfile01 habe und den zweiten teil in textfile02 und diese einfach zusammenfüge, mit der Variablen dazwischen.
Allerdings könnte ich ja den Inhalt der Textfiles direkt in zwei js variable stecken.
bei meinem js beispiel oben einfach in var s2...
aber hier kommt js dann durcheinander mit den ganzen Anführungszeichen aus dem XML text. wie kann ich denn sagen dass alles folgende ein string sein soll:
die XML file sieht so aus:
	
	
	



```
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ozxmlscene>
<ozml version="2.0">

<factory id="1" uuid="66fc0d6af6a911d6a7a7000393670732">
	<description>Bild</description>
	<manufacturer>Apple</manufacturer>
	<version>1</version>
</factory>
```
 usw....

cheers

FLO


----------



## Sven Mintel (4. Mai 2006)

Mmmh...ich kann das leider nicht testen, weil ich keinen JS-fähigen Server habe, aber ich wüsste nicht, warum es da Probleme mit den Anführungszeichen geben sollte, wenn du den String in einer Variablen hast


----------



## spierala (4. Mai 2006)

Sven Mintel hat gesagt.:
			
		

> Mmmh...ich kann das leider nicht testen, weil ich keinen JS-fähigen Server habe, aber ich wüsste nicht, warum es da Probleme mit den Anführungszeichen geben sollte, wenn du den String in einer Variablen hast



ich hab jetzt nochmal alle möglichen varianten getestet...
anscheinend sind die einrückungen und die zeilenumbrüche im XML file das problem.
wenn ich die alle entferne, gibt es nach dem reinpasten keine probleme.
abgesehen davon, dass die länge eines Strings pro Variable limitiert zu sein scheint...
darum muss ich das 500 Zeilen XML fast auf 10 Variablen verteilen, was auch bescheuert ist... gibts da nichts geschickteres?

Gruss FLO


----------



## Sven Mintel (4. Mai 2006)

Ich hab jetzt ehrlichgesagt nirgends etwas über die Methode "writestring()" gefunden.

Probiere mal, das XML-File per readln() zeilenweise auszulesen und dann per writeln() wiederum zeilenweise in die andere Datei zu schreiben.


----------



## spierala (5. Mai 2006)

danke sven!
so hats super hingehauen.

mein script sieht jetzt so aus:
	
	
	



```
function rwlines(r,w,clip)
{
	var r = new File(r);
	var i,a,c;
	var w = new File(w,"write","TEXT"); 
	var s;
	var clip;
	var neu;
	
	if (r.isopen){
		post(clip);
		i=0;
		while (a=r.readline()) { // returns a string
			post("line[" + i + "]: " + a + "\n");
			i++;
			if (a.search(/clip02.mov+/) != -1)  // wenn er clip02 findet, dann...            
			{neu = a.replace(/clip02.mov/, clip);
            w.writestring(neu + "\n");}
            else
            {w.writestring(a + "\n");}
		}
		r.close();
		w.close();
	} else {
		post("could not open file: " + s + "\n");
	}
}
```

das einzige was ich noch nicht kapiert habe wie ich die neue file unter einem bestimmten Pfad sichern kann...

cheers


----------



## Sven Mintel (5. Mai 2006)

Naja.... ich hab mich mit dem serverseitigen JS noch nie weitergehend beschäftigt, aber soweit ich das sehe, gibst du den Pfad beim erstellen des File-Objektes an.
Ist unter dem Pfad keine Datei vorhanden, wird diese dort erstellt.

Verwirrt mich aber sowieso das ganze...zu writestring() hab ich garnichts gefunden, und wenn es bei dir mit readline() funktioniert...komisch: die Methode in Javascript heisst readln() ....readline() heisst sie in MS-JScript


----------

