Auslagerungdatei vergrößern

Diskutiere mit über: Auslagerungdatei vergrößern im Mac OS X Forum

  1. kana

    kana Thread Starter MacUser Mitglied

    Beiträge:
    357
    Zustimmungen:
    0
    Registriert seit:
    03.07.2005
    Hallo

    Ich habe mir ein "kleine" Perl-Script geschrieben das aus einem "kleinen" Tar-Archiv(3,5GB) die darin enthalten Datein ausliest.
    Wenn aber der Virtuele Speicher von Perl 2GB überschreite kommt die Fehlermeldung: Out of Memory ... usw.
    Ich habe auch versucht das Archi zu entpacken, geht aber leider nur sehr schwer.
    Habe nämlich nach 1 1/2 Tage und 20GB HDD Verbrauch abgebrochen (war nicht einmal bei der Hälfte).
    Das Archiv enthält lauter 1KB Dateien und das massenweise.
    Falls es jemanden interessiert das Archiv ist von www.freecddb.org

    Nun meine Frage:
    Kann man den Swapspace von OSX vorübergehten auf mehrere GB setzen und dann auch wieder zurück?
    Und wenn ja wie?

    MfG Kana
     
  2. maceis

    maceis MacUser Mitglied

    Beiträge:
    16.645
    Zustimmungen:
    596
    Registriert seit:
    24.09.2003
    Nein, die Speicherverwaltung ist Sahe des Systems.

    Was mir nicht klar ist:
    1. Warum benötigst Du ein Perl Skript, um ein Archiv auszupacken?
    2. Warum packst Du das Archiv nicht schrittweise aus, wenn es in einem Rutsch nicht klappt?
     
  3. kana

    kana Thread Starter MacUser Mitglied

    Beiträge:
    357
    Zustimmungen:
    0
    Registriert seit:
    03.07.2005
    Ich habe das iBook 1,5 Tage durchgehend entpacken lassen.
    Um wie teilweise es ist ein großen Archiv.
    mit Perl ist es möglich den Inhalt auszulesen ohne das man es entpackt.
     
  4. maceis

    maceis MacUser Mitglied

    Beiträge:
    16.645
    Zustimmungen:
    596
    Registriert seit:
    24.09.2003
    Was meinst Du mit "Inhalt auslesen"?
    Wenn Du willst, poste doch mal das Perl Skript, vielleicht sehe ich dann, was Du vorhast. Mit schrittweise meine ich, dass Du nicht alle Dateien auf einmal entpackst.

    Leider hast Du auch nicht geschrieben, wie Du versucht hast, das Archiv zu entpacken, ob es komprimiert ist und ob Du alle Dateien aus dem Archiv benötigst oder nur einige.

    Mal abgesehen davon, dass es nicht geht, bezweifle ich auch, dass eine Vergrößerung der Auslagerungsdateien Dein eigentliches Problem lösen würde.
     
  5. kana

    kana Thread Starter MacUser Mitglied

    Beiträge:
    357
    Zustimmungen:
    0
    Registriert seit:
    03.07.2005
    Hier ist das Script.
    Ist zwar noch nicht ganz fertig aber um grundlegenden geht es.

    Code:
    use File::Find;
    use Archive::Tar;
    use Thread;
    use DBI;
    use Unicode::String;
    
    $datenbank = "dbi:mysql:database=mp3;host=localhost;port=3306";
    $user = "root";
    $passwd = "";
    
    
    $time = time();
    
    print "Pfad realtiv zum Script angeben(./): ";
    $url = <stdin>;
    chomp $url;
    
    $dbh = DBI->connect($datenbank, $user, $passwd) or die $DBI::errstr;
    find(\&getTar, "$url");
    $dbh->disconnect();
    print "Benötigte Zeit in Sek.: ".$time-time."\n";
    
    
    
    # Funktion für File::Find zum herausfinfenob .tar oder nicht
    #--------------------------------------------------------------------------------
    sub getTar()
    	{
    	if($_ =~/.tar/)
    		{
    		print "Open $_\n";
    		readTar($_);
    		print "Close $_\n";
    		}
    	}
    	
    # Funktion zum laden und auslesen des Archives
    #--------------------------------------------------------------------------------
    sub readTar()
    	{
    	my $tar;
    	my $content;
    	my @scontent;
    	$tar = Archive::Tar->new;
    	$tar->read($_[0],1);
    	my @tarfilelist = $tar->list_files();
    	foreach (@tarfilelist)
    		{
    		$lange = $#tarfilelist;
    		$n++;
    		#print "###############################\n ";
    
    		print  "$n/$lange File:".$_." reading\n";
    		#print "###############################\n";
    		$content = $tar->get_content($_);
    		@scontent = split "\n", $content;
    		#print $scontent[2];
    		getTagTar(@scontent);
    		}
    	$tar->clear;
    	}
    
    sub getTagTar()
    
    	{
    	# Einstellungen
    	#------------------------------------------------------------------------------------
    	$visualisierung = 0;				# 0 = Aus, 1 = Ein	
    	
    	# Arrays bei jeden Durchlauf zurücksetzen
    	#------------------------------------------------------------------------------------
    	my @artist;
    	my @title;
    	my @srow;
    	my @ssrow;
    	my @zeile;
    	my $coment;
    	my $album;
    	my $gerne;
    	my $year;
    	my $id;
    	my $tr;
    	my $ti;
    	my $alb;
    	my $art;
    	
    	# Zeilen einzeln auswerten
    	#---------------------------------------------------------------------------------
    	$track = 0;
    	foreach $string (@_)
    		{
    		my $row = new Unicode::String($string); 
    		$row = $row->utf8();
    		chomp $row;
    		$row =~ s/_/ /g;
    		# Album und Artist bestimmen
    		# $temp_artist = $artist wenn nur ein Artist vorhanden ist
    		#-----------------------------------------------------------------------------
    		if($row =~ /DTITLE/)
    			{
    			$row =~ s/DTITLE=//;
    			($temp_artist, $album) = split " / ", $row;
    			$temp_artist = delspace($temp_artist);
    			$album = delspace($album);
    			}
    			
    		# Jahr bestimmen
    		#----------------------------------------------------------------------------
    		elsif($row =~ /DYEAR/)
    			{
    			$row =~ s/DYEAR=//;
    			$year = delspace($row);
    			}
    			
    		# Gerne bestimmen
    		#----------------------------------------------------------------------------
    		elsif($row =~ /DGENRE/)
    			{
    			$row =~ s/DGENRE=//;
    			$gerne = delspace($row);
    			}
    		
    		# Titel bestimmen
    		# Wenn $row "-" oder "/" --> Aufteilung in Artist und Titel sonst wird $temp_artist verwendet
    		#----------------------------------------------------------------------------
    		elsif($row =~ /TTITLE/)
    			{
    			$row =~ s/TTITLE//;
    			@srow = split "=", $row;
    			if($row =~ /-/ and !($row =~ /\//))
    				{
    				@ssrow = split "-", $srow[1];
    				$ssrow[0] = delspace("$ssrow[0]");
    				$ssrow[1] = delspace("$ssrow[1]");
    				if($ssrow[0] =~ /\d/ and !($ssrow[0] =~ /\D/))
    					{
    					$artist[$track] =  delspace("$ssrow[1]");
    					$title[$track] = $temp_artist;
    					}
    				else
    					{
    					$title[$track] = delspace($ssrow[1]);
    					$artist[$track] =  delspace($ssrow[0]);
    					$coment = $temp_artist;					
    					}
    				}
    			elsif($row =~ /\// or ($row =~ /-/ and ($row =~ /\//)))
    				{
    				@ssrow = split "/", $srow[1];
    				if($#ssrow > 2)
    					{
    					$title[$track] = delspace($ssrow[2]);
    					$artist[$track] =  delspace("$ssrow[0]/$ssrow[1]");
    					}
    				else
    					{
    					$title[$track] = delspace($ssrow[2]);
    					$artist[$track] =  delspace($ssrow[0]);
    					}
    				$coment = $temp_artist;
    				}
    			else
    				{
    				$title[$track] = delspace($srow[1]);
    				$artist[$track] = $temp_artist;
    				}
    				
    			@hssrow = split "-", $$title[$track];
    			if($hssrow[0] =~ /\d/ and !($hssrow[0] =~ /\D/))
    					{
    					$title[$track] = $hssrow[1];
    					}
    
    			($tr, $ti) = split " ", $title[$track];
    			$tr = delspace("$tr");
    			if($tr =~ /\d/ and !($tr =~ /\D/) and $coment)
    					{
    					$title[$track] = $ti;
    					$artist[$track] = $coment;
    					$coment = "";
    					}		
    			$track++;
    			}
    		elsif($row =~/DISCID/)
    			{
    			$row =~ s/DISCID=//;
    			$id = delspace($row);
    			}
    		
    		# Tracknummern entfernen
    		($art, $alb) = split "-", $artist[$track];
    		$alb = delspace("$alb");
    		if($alb == $alblum)
    			{
    			delspace("$art");
    			$artist[$track] = $art;
    			}
    		
    		($art, $alb) = split " ", $artist[$track];
    		$art = delspace("$art");
    		if($art =~ /\d/ and !($art =~ /\D/) or $art =~ /\.\:/)
    			{
    			$artist[$track] =  delspace("$alb");
    			$title[$track] = $coment;
    			}
    			
    		# Tracknummer erhöhen
    		if($row =~ /TTITLE/)
    			{
    			$track++;
    			}
    		}
    	
    	# Ausgabe
    	#------------------------------------------------------------------------------------
    	if($visualisierung)
    		{
    		print "Kommentar:\t$coment\nAlbum\t\t$album($id)\nGerne\t\t$gerne\nJahr\t\t$year\n";
    			
    		$track = 0;
    		foreach(@title)
    			{
    			print $track . "\t" . $artist[$track] . "\t" . $title[$track] . "\n";
    			$track++;
    			}
    		}
    		
    	$track = 0;
    	
    	# In Datenbank schreiben
    	#------------------------------------------------------------------------------------
    	foreach(@title)
    		{
    		if($artist[$track] and $title[$track] and !($artist[$track] =~/\?.*\?.*\?/) and !($title[$track] =~/\?.*\?.*\?/) and !($track =~/\?.*\?.*\?/) and !($album =~/\?.*\?.*\?/) and !($gerne =~/\?.*\?.*\?/) and  !($year =~/\?.*\?.*\?/) and !($id =~/\?.*\?.*\?/) and !($coment =~/\?.*\?.*\?/) and ($artist[$track] =~/\w/) and ($title[$track] =~/\w/) and ($track =~/\w/) and ($album =~/\w/) and ($gerne =~/\w/) and  ($year =~/\w/) and ($id =~/\w/) and ($coment =~/\w/) and $title[$track] =~ /.$/ and $artist[$track] =~ /.$/ and $album =~ /.$/)
    			{
    			writeDB($artist[$track], $title[$track], $album, $track, $gerne, $year, $coment, $id);
    			}
    		$track++;
    		}
    	}
    
    # Funktion für die Datenbank
    #----------------------------------------------------------------------------------------------------------------
    sub writeDB()
    	{
    	# Nötig wenn keine Keys definiert sind
    	#my $statement = qq{SELECT artist, title, album, track, gerne, year, coment, id FROM perl_cddb WHERE artist = "$_[0]" AND title = "$_[1]" AND album = "$_[2]" AND track = "$_[3]" AND gerne = "$_[4]" AND year = "$_[5]" AND coment = "$_[6]" AND id = "$_[7]";};
    	#my $sth = $dbh->prepare($statement);
    	#my $rv = $sth->execute;
    	#my @spalte = $sth->fetchrow_array();
    	#$rv = $sth->finish;
    	#if(!@spalte)
    		{
    		$statement = qq{INSERT INTO perl_cddb (artist, title, album, track, gerne, year, coment, id) VALUES ("$_[0]", "$_[1]", "$_[2]", "$_[3]", "$_[4]", "$_[5]", "$_[6]", "$_[7]");};
    		$sth = $dbh->prepare($statement);
    		$rv = $sth->execute;
    		$rv = $sth->finish;
    		}
    	}
    	
    sub delspace()
    	{
    	$_[0] =~ s/^\s+//;	# Führende Leerzeichen,
    	$_[0] =~ s/^\W+//;	# Fürfrende nicht Wortzeichen,
    	$_[0] =~ s/\s+$//;  # Beendende Leerzeichen enzfernene
    	return $_[0];
    	}
    
    Hier der Teil der das Tar-Archiv betrifft

    Code:
    sub readTar()
    	{
    	my $tar;
    	my $content;
    	my @scontent;
    	$tar = Archive::Tar->new;
    	$tar->read($_[0],1);
    	my @tarfilelist = $tar->list_files();
    	foreach (@tarfilelist)
    		{
    		$lange = $#tarfilelist;
    		$n++;
    		#print "###############################\n ";
    
    		print  "$n/$lange File:".$_." reading\n";
    		#print "###############################\n";
    		$content = $tar->get_content($_);
    		@scontent = split "\n", $content;
    		#print $scontent[2];
    		getTagTar(@scontent);
    		}
    	$tar->clear;
    	}
    
    
     
  6. maceis

    maceis MacUser Mitglied

    Beiträge:
    16.645
    Zustimmungen:
    596
    Registriert seit:
    24.09.2003
    Kurz zu Deinem Skript: es fehlen "use strict" und "use warnings"
    Code:
    print "Benötigte Zeit in Sek.: ".$time-time."\n";
    wird nicht funktionieren, aber das nur am Rande.
    Das Modul WebService::FreeDB dürfte Dich evtl. interessieren?

    Im übrigen würde ich Dir empfehlen mal einige Dateien (max. 10-20 Stück) aus Deinem Archiv manuell zu entpacken und daraus ein kleines Archiv zu erstellen, mit dem Du Dein Skript dann ausprobieren und entwickeln kannst.
    Damit bist Du das Speicherproblem erst einmal los.

    Ich würde mir auch überlegen, ob ich wirklich eine Gigabyte große Datenbank lokal auf dem Rechner vorhalten will. Das musst Du aber für Dich selbst entscheiden.
     
    Zuletzt bearbeitet: 29.03.2006
  7. kana

    kana Thread Starter MacUser Mitglied

    Beiträge:
    357
    Zustimmungen:
    0
    Registriert seit:
    03.07.2005

    Und wie soll ich das machen?
    Das habe ich wie bereits gesagt nach 36h und 20GB entpacken abgebrochen.
    Gerade das ist der Grund wieso ich das Script geschrieben habe.

    Was das mit time betrifft: Es ist ja noch nicht fertig.
     
  8. maceis

    maceis MacUser Mitglied

    Beiträge:
    16.645
    Zustimmungen:
    596
    Registriert seit:
    24.09.2003
    Das ist aber dann kein guter Grund ;).
    Schnellschuss (soll die ersten 15 Dateien aus dem Archiv entpacken):
    Code:
    i=1 && for file in `tar -tf archive.tar`; do 
    if [ $i -le 15 ]
    then
    tar xvf archive.tar $file
    i=$(( $i+1 ))
    fi
    done
    Na gut ;). Versuchs mal mit "time()-$time" anstatt "$time-time".
    Das Statement zwei Zeilen weiter oben ist vermutlich auch noch nicht fertig ;).

    Jetzt mal Karten auf den Tisch.
    Was ist die eigentliche Aufgabe, die Du lösen möchtest?
    Du brauchst Doch nicht wirklich > 20GB an CD Informationen, oder?
     
    Zuletzt bearbeitet: 29.03.2006
Die Seite wird geladen...
Ähnliche Themen - Auslagerungdatei vergrößern Forum Datum
Hilfedateien vergrößern Mac OS X 23.10.2016
Schrift vergrößern Seitenleiste Mac OS X 28.10.2014
OS X Mavericks - Icons schneller laden (aufbauen) bzw. Icon Cache vergrößern Mac OS X 24.01.2014
App automatisch auf max. Bildschirm vergrößern Mac OS X 23.10.2013
Finder Einstellung Symbolvorschau beim Öffnen Dialog vergrößern Mac OS X 23.10.2013

Diese Seite empfehlen

Benutzerdefinierte Suche