Wie bekomme ich eine LinkedList aus einer Prozedur übergeben

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
alen
Beiträge: 107
Registriert: 09.04.2007 17:38
Computerausstattung: Main Hardware: AMD Ryzen 5 1600 - 6 Core / Gigabyte B450 Aorus Pro / Sapphire RX580 8GB
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64 on various Hardware Platforms
Wohnort: Duisburg
Kontaktdaten:

Wie bekomme ich eine LinkedList aus einer Prozedur übergeben

Beitrag von alen »

Hallo Zusammen,

brauche ein wenig Starthilfe. Ich möchte einen String, in meinem Fall stammt der aus einer Ausgabe eines anderen Programmes (Stichwort: ReadProgramString), in einzelne Zeilen zerlegen. Das erledigt der Codeschnippsel unten.

Nach dem Zerlegen liegt das ganze als LinkedList vor. Nun möchte diese LinkedList weiterverarbeiten. Am liebsten als ProcedureReturn so das ich diesen Programmteil immer wieder verwenden kann.

Wie bekomme ich die LinkedList aus der Prozedur übergeben ? Irgendwie gelingt mir das nicht.

Grüße
Alen Hopek

Code: Alles auswählen

Procedure SplitStringToLines(String.s)
  NewList zeilen.s()
  For i=1 To Len(Text.s)
    temp.s + Mid(Text.s, i,1)
    If Mid(Text.s, i, 1) = Chr(13)
      AddElement(zeilen())
      temp.s = RemoveString(Trim(temp.s), Chr(10) )
      temp.s = RemoveString(Trim(temp.s), Chr(13) )
      zeilen() = temp.s
      temp.s = ""
    EndIf
  Next
EndProcedure
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Linklist als Rückgabe geht nicht, nur als Parameter, also so:

Code: Alles auswählen

Procedure SplitStringToLines(zeilen.s(), String.s)
  For i=1 To Len(Text.s)
    temp.s + Mid(Text.s, i,1)
    If Mid(Text.s, i, 1) = Chr(13)
      AddElement(zeilen())
      temp.s = RemoveString(Trim(temp.s), Chr(10) )
      temp.s = RemoveString(Trim(temp.s), Chr(13) )
      zeilen() = temp.s
      temp.s = ""
    EndIf
  Next
EndProcedure 

NewList zeilen.s()
SplitStringToLines(zeilen.s(), "blabla")
Oder die LinkList global deklarieren, ist noch einfacher
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag von Tafkadasom2k5 »

Einfach die Linked Lis vor dem Prozeduraufruf erstellen, und dann mit übergeben. Da PB ByRef übergibt (glaube ich, kann ich jetzt auf die Schnelle nicht beweisen :oops: ), wirst du deine Linked-List sozusagen "befüllt" haben, und sie ist trotzdem in der Hauptroutine verfügbar.

Gr33tz
Tafkadasom2k5

Edit:
Damn, THomas war mal wieder schneller <)
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Das einfachste wäre so:

Code: Alles auswählen

Global NewList zeilen.s()

Procedure SplitStringToLines(String.s)
  ClearList(zeilen())
  For i=1 To Len(Text.s)
    temp.s + Mid(Text.s, i,1)
    If Mid(Text.s, i, 1) = Chr(13)
      AddElement(zeilen())
      temp.s = RemoveString(Trim(temp.s), Chr(10) )
      temp.s = RemoveString(Trim(temp.s), Chr(13) )
      zeilen() = temp.s
      temp.s = ""
    EndIf
  Next
EndProcedure 
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten