Supportnet / Forum / Skripte(PHP,ASP,Perl...)
Array entsprechend dem Wert, der Übergebenen Variablen anlegen
Frage
Hallo Leute
Ich möchte gernen ein Array anlegen, welches den Wert der Variablen besitzt, die ich der Funktion übergebe, welche die Funktion aufruft, wo das Array erstellt wird.
Klingt etwas Kompliziert darum erklär ichs am Code.
[code]
function laden(dateiname)
{
var http = null;
if (window.XMLHttpRequest) {
http = new XMLHttpRequest();
}
else if (window.ActiveXObject) {
http = new ActiveXObject("Microsoft.XMLHTTP");
}
if (http != null) {
http.open("GET", dateiname, true);
http.onreadystatechange = array;
http.send(null);
}
}[/code]
Diese Funktion lädt mir die Datei mit dem Übergebenen Dateinamen (z.B. Mitarbeiter.csv) und ruft die Funktion array auf.
[code]
function array() {
if (http.readyState == 4) {
var buffer = http.responseText;
var columnarray = buffer.split("\n");
test = new Array();
for (x = 0; x < columnarray.length; x++) {
test[x]= new Array();
rowarray = columnarray[x].split(";");
for (y = 0; y < rowarray.length; y++) {
test[x][y]=rowarray[y];
}
}
}
}
[/code]
Diese Funktion erzeugt mir jetzt ein Array mit dem Inhalt der Datei. Der Name des Array ist jetzt test. Der Name soll aber Mitarbeiter sein. Da ich mehre Datein so in ein Array packen möchte, wäre es gut wenn es dafür irgend eine Möglichkeit gibt.
Hoff ich hab mich verständlich ausgedrückt und ihr könnt mir Helfen
Tschau Dieter
PS: Bei Fragen meldet euch noch mal
Antwort 1 von rfb
Zitat:
Der Name des Array ist jetzt test. Der Name soll aber Mitarbeiter sein.
einfach umbenennen hilft nicht?Der Name des Array ist jetzt test. Der Name soll aber Mitarbeiter sein.
Also vermute ich mal, dass mit
Zitat:
Da ich mehre Datein so in ein Array packen möchte
gemeint ist: Die Funktion soll auf mehrere Dateiinhalte angewandt werden und diese sollen jeweils in ein Array mit eigenem Namen gesteckt werden.Da ich mehre Datein so in ein Array packen möchte
Da bleibt dir wohl nur als Notbehelf die Möglichkeit einer globalen Variablen (denn du nutzt offenbar keine in Objekte gekapselten Funktionen)
dateiname (".csv" absägen!) und sprichst die in laden() an. In array() kannst du mittels dieser globalen Variablen eine neue Variable window[dateiname] anstelle von test erschaffen. Diese steht dir - wenn der dateiname "Mitarbeiter" ist - als Variable Mitarbeiter global zur Verfügung.Antwort 2 von Dieter1
Hallo
Bin neu auf dem Gebiet und weiß nicht genau was damit gemeint ist und kann dir erstmal dies bezüglich nicht weiter helfen.
Habe folgen beitrag hier gefunden
https://supportnet.de/threads/1550917
Mit dessen Hilfe lass ich mir ebenfalls das Menü zum Aufrufen der funktion
Beim Aufruf der Funktion
Wie meinst du das mit der globalen Variablen? Wo und wie soll ich die anlegen und woher weiß ich welche Datei in der Funktion
Irgenwie steh ich auf den Schlauch. Könntest du mir dies etwas näher erklären oder Codefragmente posten.
Danke für die Hilfe
Dieter
Zitat:
(denn du nutzt offenbar keine in Objekte gekapselten Funktionen)
(denn du nutzt offenbar keine in Objekte gekapselten Funktionen)
Bin neu auf dem Gebiet und weiß nicht genau was damit gemeint ist und kann dir erstmal dies bezüglich nicht weiter helfen.
Habe folgen beitrag hier gefunden
https://supportnet.de/threads/1550917
Mit dessen Hilfe lass ich mir ebenfalls das Menü zum Aufrufen der funktion
laden() erstellen. Habe Auch in der gleichen Form ein Array mit den Dateinamen angelegt.Beim Aufruf der Funktion
laden() übergebe ich ja den Dateinamen. Wie meinst du das mit der globalen Variablen? Wo und wie soll ich die anlegen und woher weiß ich welche Datei in der Funktion
laden() geöffnet werden soll?Irgenwie steh ich auf den Schlauch. Könntest du mir dies etwas näher erklären oder Codefragmente posten.
Danke für die Hilfe
Dieter
Antwort 3 von rfb
globale Variable: steht überall zur Verfügung, wird außerhalb einer Funktion deklariert (oder innerhalb einer Funktion durch Weglassen von var - ist aber nicht zu empfehlen)
lokale Variable: wird lokal in einer Funktion deklariert (mit var), steht nur dort zur Verfügung, wird beim Verlassen der funktion gelöscht.
Infos: SelfHTML (unbedingt durcharbeiten)
Also setze irgendwo außerhalb des ganzen Funktionskrams
Dann kannst du das dateiname beim Funktionsaufruf von laden weglassen.
Ich kann jetzt dazu nicht mehr schreiben ohne deine Scriptstruktur näher zu kennen.
lokale Variable: wird lokal in einer Funktion deklariert (mit var), steht nur dort zur Verfügung, wird beim Verlassen der funktion gelöscht.
Infos: SelfHTML (unbedingt durcharbeiten)
Also setze irgendwo außerhalb des ganzen Funktionskrams
var dateiname="Mitarbeiter.csv"Dann kannst du das dateiname beim Funktionsaufruf von laden weglassen.
Ich kann jetzt dazu nicht mehr schreiben ohne deine Scriptstruktur näher zu kennen.
Antwort 4 von Dieter1
Hallo
Was der Unterschied zwischen globaler und lokaler Variablen ist weiß ich. Meine Frage war etwas blöd gestellt. Wollt wissen wie ich die globale Variable anlegen muss und in der Funktion laden dann weiß welche Datei geöffnet wird.
Poste dir mal meinen gesamten Code
HTML-Dokument
In das Array soll der Anwender je nach bedarf weiter Dateinamen angeben können.
Funktion zum erstellen des Menüs:
Funktion zum laden der Datei
Funktion zum erzeugen des Arrays(bei funktion laden() aufgerufen)
In der Funktion
Muss ich jetzt für jede Datei eine globale Variable in der Form
Wen beim Funktionsaufruf die Variable weglasse, woher weis ich dann welche Datei geladen werden soll. Für jeden Verweis soll eine andere Datei geladen werden.
Hoffe du kannst mir jetzt noch mal helfen, wäre echt dankbar dafür
Tschau Dieter
Was der Unterschied zwischen globaler und lokaler Variablen ist weiß ich. Meine Frage war etwas blöd gestellt. Wollt wissen wie ich die globale Variable anlegen muss und in der Funktion laden dann weiß welche Datei geöffnet wird.
Poste dir mal meinen gesamten Code
HTML-Dokument
<html>
<head>
<title>AJAX</title>
<script type="text/javascript" src="laden.js"></script>
<script type="text/javascript" src="array.js"></script>
<script type="text/javascript" src="build_menu.js"></script>
<script type="text/javascript" src="verarbeiten.js"></script>
</head>
<body>
<!--Anzeige des Menüs-->
<div id="menu"></div><br />
<script type="text/javascript">
<!--
//Array für die Datein
dateien = new Array( "Mitarbeiter.csv",
"Artikel.csv",
"Bestellung.csv",
);
//erzeugen des Menüs
build_menu();
--></script>
<!--Anzeige des Datein (Inhalt)-->
<div id="Ausgabe"></div><br />
</body>
</html>In das Array soll der Anwender je nach bedarf weiter Dateinamen angeben können.
Funktion zum erstellen des Menüs:
function build_menu(){
var htm="<table><tr><td>löschen</a></td>";
for(var n=0;n<dateien.length;n++){
htm+="<td><a href=\"javascript:laden('"+dateien[n]+"');\">"+dateien[n]+"</a></td>";
}
htm+="<td><a href=\"javascript:verarbeiten();\">Verarbeitung</a></td>";
htm+="</tr></table>";
document.getElementById("menu").innerHTML=htm;
}Funktion zum laden der Datei
var http = null;
function laden(dateiname)
{
if (window.XMLHttpRequest) {
http = new XMLHttpRequest();
}
else if (window.ActiveXObject) {
http = new ActiveXObject("Microsoft.XMLHTTP");
}
if (http != null) {
http.open("GET", dateiname, true);
http.onreadystatechange = array;
http.send(null);
}
}Funktion zum erzeugen des Arrays(bei funktion laden() aufgerufen)
var test = new Array();
function array() {
if (http.readyState == 4) {
var buffer = http.responseText;
var columnarray = buffer.split("\n");
for (x = 0; x < columnarray.length; x++) {
test[x]= new Array();
for (y = 0; y < rowarray.length; y++) {
test[x][y]=rowarray[y];
}
}
document.write(test[1][1]);
}
}In der Funktion
array() möchte ich jetzt nach Betätigung des Verweise ein Array mit dem Namen der Datei (ohne .csv), welche geladen wurde, erstellen.Muss ich jetzt für jede Datei eine globale Variable in der Form
var dateiname="Mitarbeiter.csv" anlegen? Ich habe ja das Array wo die Dateinamen drinne stehen.Wen beim Funktionsaufruf die Variable weglasse, woher weis ich dann welche Datei geladen werden soll. Für jeden Verweis soll eine andere Datei geladen werden.
Hoffe du kannst mir jetzt noch mal helfen, wäre echt dankbar dafür
Tschau Dieter
Antwort 5 von renan
Zitat:
In das Array soll der Anwender je nach bedarf weiter Dateinamen angeben können.
In das Array soll der Anwender je nach bedarf weiter Dateinamen angeben können.
zur laufzeit? das ist nicht schwer. jedes element eines arrays kann man auch über seinen index ansprechen. und wenn man einem element einen wert zuweist, dessen indexwert noch gar nicht existiert, dann wird dieses von js neu erzeugt.
also es existieren die elemente
dateien[0]="Mitarbeiter.csv"
dateien[1]="Artikel.csv"
und dateien[2]="Bestellung.csv"
mit
dateien[3]="neue_datei.csv" hängt man einen neuen eintrag an den array hinten dran. demo:
<html><head></head><body>
<script type="text/javascript">
var dateien=new Array(
"Mitarbeiter.csv",
"Artikel.csv",
"Bestellung.csv"
);
display_array(dateien);
erweitere_array(dateien);
display_array(dateien);
function erweitere_array(a){
a[a.length]=prompt("neuen Dateinamen eingeben:");
return(a);
}
function display_array(a){
var msg="";
for(var n=0;n<a.length;n++) msg+=a[n]+"\n";
alert(msg);
}
</script>
</body></html>
Antwort 6 von renan
berichtigung:
das skript funktionierte aber trotzdem, was mich allerdings ein bisschen erschreckt!
vielleicht kann mir das jemand erklären?
...
display_array(dateien);
dateien=erweitere_array(dateien);
display_array(dateien);
...
das skript funktionierte aber trotzdem, was mich allerdings ein bisschen erschreckt!
vielleicht kann mir das jemand erklären?
Antwort 7 von Dieter1
Hallo renam
Das Array mit den Dateinamen soll nicht zur Laufzeit erzeugt werden. Der Nutzer vervollständigt es im Code. Pssiert nur recht selten, daher dürfte es keine Probleme geben.
Ich wollte eigentlich wissen wie ich ein Array, dessen Name dem Wert von dateiname. Die Variable Dateiname wird der Funktion laden() übergeben, welche dann die Funktion array() aufruft. Das Array soll in der Funktion array() erzeugt werden. Ich möchte für jede Datei, die ich lade ein extra Array haben, mit dem Namen der Datei ohne der Endung csv. DIeses Array wird zur Laufzeit erzeugt.
rfb hat ja in Antwort1 schon mal einen Lösungsvorschlag gepostet. Ich weiß aber nicht wie ich dies richtig umsetzten soll.
Vielleicht kannst du mir dies näher erklären wie ich das machen muss.
Tschau Dieter
Das Array mit den Dateinamen soll nicht zur Laufzeit erzeugt werden. Der Nutzer vervollständigt es im Code. Pssiert nur recht selten, daher dürfte es keine Probleme geben.
Ich wollte eigentlich wissen wie ich ein Array, dessen Name dem Wert von dateiname. Die Variable Dateiname wird der Funktion laden() übergeben, welche dann die Funktion array() aufruft. Das Array soll in der Funktion array() erzeugt werden. Ich möchte für jede Datei, die ich lade ein extra Array haben, mit dem Namen der Datei ohne der Endung csv. DIeses Array wird zur Laufzeit erzeugt.
rfb hat ja in Antwort1 schon mal einen Lösungsvorschlag gepostet. Ich weiß aber nicht wie ich dies richtig umsetzten soll.
Vielleicht kannst du mir dies näher erklären wie ich das machen muss.
Tschau Dieter
Antwort 8 von renan
bin mir nicht sicher ob ich verstanden habe. du möchtest zur laufzeit einen array mit variablem namen erzeugen? mein erster gedanke dazu wäre, ein array zu haben und per assoziation mehrere arrays dort reinzustecken.
var a=new Array();
var b=new Array();
var c=new Array();
var name="peter";
a[name]=b;
name="wolf";
a[name]=c;
also statt einem array names "peter" hat man diesen array in a["peter"]
var a=new Array();
var b=new Array();
var c=new Array();
var name="peter";
a[name]=b;
name="wolf";
a[name]=c;
also statt einem array names "peter" hat man diesen array in a["peter"]
Antwort 9 von Dieter1
Hallo
eine gesamten Code hab ich ja bereits gepostet.
Ich möchte in der Funktion
Die Dateinamen stehen bereits in einem Array "dateien". Wenn ich die Funktion
Da ich die Dateien in der Funktion
Sieh dir bitte noch mal meine Funktion Array() an. Dort erstelle ich ein Array Namens Test. Wenn ich aber die Datei Mitarbeiter lade soll es aber Mitarbeiter heißen. Also jenachdem welchen Link ich betätige und die dem entprechende Datei lade so soll das array heißen.
Irgendwie ganzschön verwirrend, hoff ihr versteht mich aber trotztdem und könnt mir weiterhelfen
Tschau Dieter
eine gesamten Code hab ich ja bereits gepostet.
Ich möchte in der Funktion
array() ein Array erzeugen, welches den Namen besitzt, den die Variable Dateiname als Wert bei der Funktion laden() besitzt.Die Dateinamen stehen bereits in einem Array "dateien". Wenn ich die Funktion
laden() mittels Verweis aufrufe (siehe Funktion build_menu()) übergebe ich ja den Dateinamen. Da ich die Dateien in der Funktion
verarbeiten auswerten möchte, benötige ich ja jeden Dateiinhalt in einem Array. Ich möchte aber auch nicht für jeden Verweis eine andere Funktion laden() aufrufen, die dann eine Funktion array1, array2 und soweiter aufruft. Und in den Funktionen array() ändere ich dan nur den Namen des zu erstellenden Arrays.Sieh dir bitte noch mal meine Funktion Array() an. Dort erstelle ich ein Array Namens Test. Wenn ich aber die Datei Mitarbeiter lade soll es aber Mitarbeiter heißen. Also jenachdem welchen Link ich betätige und die dem entprechende Datei lade so soll das array heißen.
Irgendwie ganzschön verwirrend, hoff ihr versteht mich aber trotztdem und könnt mir weiterhelfen
Tschau Dieter
Antwort 10 von renan
Zitat:
Sieh dir bitte noch mal meine Funktion Array() an. Dort erstelle ich ein Array Namens Test. Wenn ich aber die Datei Mitarbeiter lade soll es aber Mitarbeiter heißen. Also jenachdem welchen Link ich betätige und die dem entprechende Datei lade so soll das array heißen.
Sieh dir bitte noch mal meine Funktion Array() an. Dort erstelle ich ein Array Namens Test. Wenn ich aber die Datei Mitarbeiter lade soll es aber Mitarbeiter heißen. Also jenachdem welchen Link ich betätige und die dem entprechende Datei lade so soll das array heißen.
sorry aber ich versteh deinen code nicht. aber deine anforderung wird durch meinen vorschlag (fast) erfüllt, nur dass es keine eigene arrayvariable mit diesem namen ist, sondern quasi ein "unterarray" eines array mit dem gewünschten namen:
<a href="javascript:erzeuge('mitarbeiter.txt')">mitarbeiter</a>
<a href="javascript:erzeuge('sabotteur.txt')">sabotteur</a>
var container=new Array(); // global
function erzeuge(arrayname){
container[arrayname]=lade_in_array(arrayname);
}
function lade_in_array(dateiname){
var txt=new Array();
// lese datei in array txt
return(txt);
}
wenn der anwender auf den link mitarbeiter klickt, wird im globalen array, namens container, ein element mit namen container["mitarbeiter.txt"] und dem inhalt der datei mitarbeiter.txt erzeugt.
ps: der code ist so nicht lauffähig, soll nur die idee vermitteln.
pps: ich glaube, dass man in js nicht mit variablen variablennamen arbeiten kann. das geht in php, aber da ist auch jede variable durch ein spezielles symbol gekennzeichnet. ich versteh auch nicht, warum du diese anforderung hast. normalerweise braucht man sowas nicht. aber egal, was das weiterverwenden der daten unter dem aufruf dieses variablen namens angeht, sollte mein vorschlag das gleiche leisten.
Antwort 11 von Dieter1
Hallo
@renam
lauf der Antwort von rfb muss es aber möglich sein, wenn ich fie Antwort richtig verstanden habe
Ich habe bis jetzt drei Datein: Mitarbeiter, Artikel und Bestellung. In Bestellung stehn nur Zahlen (ID's) drinne. Ich möchte aber wissen welcher Mitarber, welchen Artikel bestellt hat.
In Bestellung steht also 1; 3; 5. Das Bedeutet das Meier 5 X Druckerpapier bestellt hat. Und um diese Auswertung vorzunehmen muss ich auf den Dateiinhalt zu greifen. Den Inhalt hät ich gerne in ein Array gespeichert.
Wie würdest du es denn sonst realieseren
Ich werde mich mal mit den assoziativen Arrays befassen, mal sehn ob ich hinbekomme.
@rfb
Wäre nett wenn du mir nochmals helfen könntest bzgl. der Verwendung von window[dateiname]. Habe "test" in der funktion array einfach durch window[dateiname] ersetzt. Und eine globale Variable angelegt in der der Dateiname gespeichert wird. Funktioniert nicht so richtigt (soll heißen das garnichts mehr gemacht wird und auch keine Fehlermeldung erscheint). Wie muss ich window[dateiname] richtig verwenden.
Danke für eure Hilfe
Dieter
@renam
Zitat:
pps: ich glaube, dass man in js nicht mit variablen variablennamen arbeiten
pps: ich glaube, dass man in js nicht mit variablen variablennamen arbeiten
lauf der Antwort von rfb muss es aber möglich sein, wenn ich fie Antwort richtig verstanden habe
Zitat:
Da bleibt dir wohl nur als Notbehelf die Möglichkeit einer globalen Variablen (denn du nutzt offenbar keine in Objekte gekapselten Funktionen) dateiname (".csv" absägen!) und sprichst die in laden() an. In array() kannst du mittels dieser globalen Variablen eine neue Variable window[dateiname] anstelle von test erschaffen. Diese steht dir - wenn der dateiname "Mitarbeiter" ist - als Variable Mitarbeiter global zur Verfügung.
Da bleibt dir wohl nur als Notbehelf die Möglichkeit einer globalen Variablen (denn du nutzt offenbar keine in Objekte gekapselten Funktionen) dateiname (".csv" absägen!) und sprichst die in laden() an. In array() kannst du mittels dieser globalen Variablen eine neue Variable window[dateiname] anstelle von test erschaffen. Diese steht dir - wenn der dateiname "Mitarbeiter" ist - als Variable Mitarbeiter global zur Verfügung.
Zitat:
ich versteh auch nicht, warum du diese anforderung hast.
ich versteh auch nicht, warum du diese anforderung hast.
Ich habe bis jetzt drei Datein: Mitarbeiter, Artikel und Bestellung. In Bestellung stehn nur Zahlen (ID's) drinne. Ich möchte aber wissen welcher Mitarber, welchen Artikel bestellt hat.
In Bestellung steht also 1; 3; 5. Das Bedeutet das Meier 5 X Druckerpapier bestellt hat. Und um diese Auswertung vorzunehmen muss ich auf den Dateiinhalt zu greifen. Den Inhalt hät ich gerne in ein Array gespeichert.
Zitat:
normalerweise braucht man sowas nicht.
normalerweise braucht man sowas nicht.
Wie würdest du es denn sonst realieseren
Ich werde mich mal mit den assoziativen Arrays befassen, mal sehn ob ich hinbekomme.
@rfb
Wäre nett wenn du mir nochmals helfen könntest bzgl. der Verwendung von window[dateiname]. Habe "test" in der funktion array einfach durch window[dateiname] ersetzt. Und eine globale Variable angelegt in der der Dateiname gespeichert wird. Funktioniert nicht so richtigt (soll heißen das garnichts mehr gemacht wird und auch keine Fehlermeldung erscheint). Wie muss ich window[dateiname] richtig verwenden.
Danke für eure Hilfe
Dieter
Antwort 12 von renan
Zitat:
lauf der Antwort von rfb muss es aber möglich sein, wenn ich fie Antwort richtig verstanden habe
lauf der Antwort von rfb muss es aber möglich sein, wenn ich fie Antwort richtig verstanden habe
stimmt, hört sich so an.
Zitat:
In Bestellung steht also 1; 3; 5. Das Bedeutet das Meier 5 X Druckerpapier bestellt hat.[..] Wie würdest du es denn sonst realieseren
In Bestellung steht also 1; 3; 5. Das Bedeutet das Meier 5 X Druckerpapier bestellt hat.[..] Wie würdest du es denn sonst realieseren
ich würd das so machen, dass ich assoziative arrays erzeugen würde. aber nicht unbedingt für jede datei einen array, sondern einen für mitarbeiter, einen für material etc.
bsp:
mitarbeiter["3"]="Meier";
material["5"]="Druckerpapier";
aber nicht mit variablen variablennamen. die möglichen variablennamen stehen doch vor beginn der programmausführung schon fest. klar, kann man versuchen, eine verallgemeinerte version zu programmieren, die auch bei willkürlich hinzugefügten neuen dateienamen immer noch ihren dienst versieht. das ist aber extrem kompliziert und letztlich auch ziemlich illusorisch. zum einen ist das format (anzahl der spalten) dieser neuen datei unbekannt und zum anderen kommt mit einer neuen datei normalerweise auch ein neuer sinnzusammenhang zwischen den objekten dazu, der sowieso eine änderung des restlichen quelltextes nötig macht.
wenn man mit anderen dateien arbeiten möchte, muss man also erstmal dafür sorgen, dass die datei dem programm mitteilt, welche objekte sich in ihr in welcher spalte befinden. dein programm muss eine anzahl objekte kennen (bzw alle die es zukünftig geben kann) und deren beziehung untereinander. dann kann das funzen.
Antwort 13 von renan
aber wenn ichs mir nochmal überlege .. wenn das programm alle objekttypen kennt, brauch es eigentlich auch wieder keine variablen namen dafür .. oder nich oder doch? .. ich gebs auf ;-)

